SimpleDateFormat Java: Menyingkap Kesengsaraan Keselamatan Benangnya
Kelas SimpleDateFormat di Java telah terkenal kerana tidak selamat untuk benang, satu perkara yang penting. kebimbangan dalam persekitaran berbilang benang. Untuk memahami punca isu ini, mari kita mendalami dalaman kelas.
Penyebabnya: Manipulasi Medan Instance
SimpleDateFormat bergantung pada medan contoh untuk menyimpan hasil perantaraan. Ini menimbulkan masalah apabila beberapa utas mengakses contoh yang sama secara serentak. Setiap urutan boleh menulis ganti atau merosakkan nilai yang ditetapkan oleh urutan lain, membawa kepada hasil yang salah.
Sebagai contoh, kaedah parse() menggunakan medan contoh Kalendar yang dikosongkan dan diubah suai semasa pelaksanaannya. Jika utas lain memanggil parse() sebelum utas pertama menyelesaikan operasinya, kalendar akan ditetapkan semula, mengganggu pengiraan utas kedua.
CONTOH KOD:
// Thread 1 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse("2023-03-08"); // Calendar is cleared and modified // Thread 2 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse("2023-04-01"); // Incorrect result due to cleared calendar
FastDateFormat: Selamat Benang Alternatif
Tidak seperti SimpleDateFormat, FastDateFormat direka bentuk untuk selamat untuk benang. Ia mencapai ini dengan menggunakan cache setempat-benang, memastikan setiap utas mempunyai contoh pemformatan khusus sendiri. Akibatnya, berbilang urutan boleh menggunakan FastDateFormat secara bebas tanpa menjejaskan integriti data.
KESIMPULAN:
Isu keselamatan benang dalam SimpleDateFormat berpunca daripada pergantungannya pada medan contoh dikongsi yang boleh rosak oleh akses benang serentak. Untuk pemformatan tarikh selamat benang dalam Java, FastDateFormat mempersembahkan alternatif yang boleh dipercayai dengan penggunaan caching setempat benang.
Atas ialah kandungan terperinci Mengapakah SimpleDateFormat Java Bukan Thread-Safe, dan Apakah Alternatif yang Lebih Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!