Skip to content Skip to sidebar Skip to footer

Bagaimana variabel ThreadLocal bekerja di Java?

Halo sobat Nexa, variabel ThreadLocal adalah konsep dan kelas yang menarik dari API Java. Tidak banyak pengembang yang mengetahuinya dan sangat sedikit yang tahu cara menggunakannya dengan benar. Beberapa tahun yang lalu, ini juga merupakan pertanyaan wawancara Java yang populer untuk pengembang berpengalaman, tetapi selama bertahun-tahun, kepopulerannya menurun karena semakin banyak orang yang sekarang bertanya tentang Phaser, CompletableFuture, ForkJoinPool, dan utilitas konkurensi baru lainnya. Variabel ThreadLocal, seperti namanya, bersifat lokal pada thread, yang berarti setiap thread memiliki salinan sendiri. Ini berarti mereka tidak perlu melihat ke memori utama ketika mereka ingin menggunakan variabel tersebut dan yang terbaik adalah variabel tersebut bahkan tidak dibagi antara thread sehingga tidak perlu penguncian atau sinkronisasi.

Dengan kata lain, ThreadLocal digunakan untuk memberikan thread-safety tanpa kontensi yang muncul akibat penguncian, baik dengan menggunakan kata kunci synchronized atau kerangka kerja Lock Java 1.5. Karena setiap thread memiliki salinan sendiri, tidak ada data yang dibagi antara thread, yang berarti tidak perlu sinkronisasi dan tidak ada masalah multithreading.

Namun, penggunaan ThreadLocal yang ceroboh dalam lingkungan yang dikelola seperti server web dapat menyebabkan kebocoran memori classloader di Java. Karena lingkungan yang dikelola menggunakan thread pool, yang dibagi antara aplikasi web, masa pakainya lebih lama dari aplikasi web itu sendiri. Karena setiap thread menyimpan referensi variabel threadlocal, dapat mencegahnya dari dikumpulkan oleh Garbage Collector dan selanjutnya ke classloader yang memuatnya.

Untuk menghindari masalah ini, ingatlah untuk menghapus variabel Threadlocal, setelah selesai menggunakannya. Filter adalah tempat yang tepat untuk membuat dan menghapus variabel Threadlocal pada aplikasi web Java.

Namun, skenario ini tidak akan terjadi jika Anda hanya menyimpan objek yang dimuat oleh BootStrap classloader ke ThreadLocal. Masalah ini muncul ketika Anda menyimpan kelas aplikasi sebagai ThreadLocal yang dimuat oleh classloader aplikasi web.

ThreadLocal juga merupakan kelas parameterized di Java, yang berarti Anda hanya dapat menyimpan Objek di sana. Dan jika Anda bertanya-tanya kapan menggunakan variabel ThreadLocal, izinkan saya memberi tahu bahwa salah satu penggunaan umum variabel ThreadLocal adalah untuk membuat SimpleDateFormat thread-safe.

Hal penting tentang variabel ThreadLocal di Java

Berikut adalah hal-hal penting yang harus diketahui dan diingat oleh setiap pengembang Java sebelum menggunakan variabel ThreadLocal di aplikasi mereka:

Variabel ThreadLocal adalah variabel per-thread yang disediakan oleh JDK. Ini memungkinkan penggunaan kembali objek yang mahal tanpa memperkenalkan masalah sinkronisasi dan konkurensi yang mahal. Aplikasi Java dapat membuat jumlah variabel lokal thread apa saja.

Objek yang sering digunakan tetapi mahal untuk dibuat adalah kandidat yang baik untuk disimpan sebagai variabel ThreadLocal. Konverter, formatter seperti SimpleDateFormat, factory seperti BorderFactory, Connection seperti SQLConnection, adalah beberapa objek praktis yang dapat digunakan kembali dengan aman dengan menggunakan konsep ThreadLocal.

Menyimpan objek yang murah di ThreadLocal tidak disarankan, objek seperti Integer, Double, atau String tidak terlalu mahal dan dapat dibuat pada konteks lokal. Juga diingat bahwa akses ke variabel ThreadLocal biasanya melibatkan pencarian hash, jadi jika kinerja kritis dan membuat objek memakan waktu kurang dari mengambil yang ada, lebih disukai variabel lokal.

Berikut adalah contoh bagaimana variabel ThreadLocal bekerja di Java:
Bagaimana variabel ThreadLocal bekerja di Java?

Demikianlah informasi tentang apa itu ThreadLocal variable di Java dan kapan harus menggunakannya. Fitur ini bagus untuk digunakan di Java, tetapi memang sedikit sulit dalam penggunaannya. Tidak banyak kasus penggunaan di mana Anda benar-benar perlu menggunakan ThreadLocal, tetapi jika Anda menguasai concurrency dengan baik dan memiliki objek yang tidak dibagikan antar thread, maka Anda bisa menyimpannya dalam ThreadLocal variable. Sebagai contoh, Anda dapat membuat aplikasi di mana pesanan dari kota tertentu diproses oleh satu thread dan pesanan dari kota yang berbeda diproses oleh thread lain.

Terima kasih telah membaca artikel ini. Jika Anda merasa tutorial thread Java ini bermanfaat, silakan bagikan dengan teman dan kolega Anda. Jika Anda memiliki pertanyaan atau masukan, silakan beri tahu kami.

Post a Comment for "Bagaimana variabel ThreadLocal bekerja di Java?"