Dalam pemrograman, kami mendefinisikan parameter metode untuk meneruskan konten variabel, jika tingkat metode eksekusi dalam, maka setiap metode perlu menentukan parameter yang akan dilewati, saat ini, beberapa variabel dapat dilewatkan melalui ThreadLocal, selama semua metode dijalankan pada utas yang sama, nilai ThreadLocal dapat diatur dan dibaca.
Kelas ThreadLocal digunakan untuk menyediakan variabel lokal di dalam utas. Ketika variabel ini diakses (get/set) di lingkungan multi-utas, variabel di setiap utas relatif independen dari variabel di utas lain.
ThreadLocal pertama-tama akan mendapatkan utas saat ini (Thread t = Thread.currentThread()) saat menjalankan metode set, dan menggunakan utas saat ini untuk mendapatkan ThreadLocalMap, jika peta tidak kosong, itu berarti utas saat ini memiliki peta yang terikat sebelumnya, lalu perbarui nilai peta ini, jika tidak, gunakan dirinya sendiri sebagai kunci untuk menempatkan nilai dalam peta, sehingga dapat mewujudkan pengikatan variabel dan utas.
Uji kode, atur kumpulan utas untuk mempertahankan maksimum 5 utas, dan ketika kita memanggil metode get ThreadLocal dalam kasus multi-threading, kita akan mendapatkan data ThreadLocal (Data yang ditetapkan oleh utas lain), kamiMetode set ThreadLocal tidak dipanggil pada thread saat ini untuk mengatur data, seperti yang ditunjukkan pada gambar di bawah ini:
Kesalahan menyebabkan:Setelah utas digunakan kembali, kemungkinan nilai pertama yang diperoleh dari ThreadLocal adalah nilai yang tersisa dari utas sebelumnya lainnya。
Karena, setelah kita selesai dengan ThreadLocal pada utas saat ini,Pastikan untuk memanggil remove untuk pembersihan tepat waktu。 Seperti yang ditunjukkan di bawah ini:
Kode:
(Akhir)
|