Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 27855|Jawab: 1

[Sumber] Prinsip Java ThreadLocal dan penggunaan kembali multi-thread menyebabkan kekacauan data

[Salin tautan]
Diposting pada 01/11/2021 11.45.36 | | | |
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)





Mantan:Docker melihat pengaturan restart kontainer dan kontainer penghentian massal
Depan:Jenkins (5) Presentasi kelompok proyek
Diposting pada 02/11/2021 21.30.12 |
Datang untuk belajar lagi.
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com