Rumah >Java >javaTutorial >Mengapa Penyegerakan pada Objek Rentetan dalam Java Bermasalah?

Mengapa Penyegerakan pada Objek Rentetan dalam Java Bermasalah?

Patricia Arquette
Patricia Arquetteasal
2024-11-13 10:39:02964semak imbas

Why is Synchronizing on String Objects in Java Problematic?

Menyegerakkan pada Objek Rentetan dalam Java

Memahami sebab penyegerakan pada objek Rentetan dalam Java boleh menjadi masalah mendasari isu yang anda hadapi. Secara lalai, objek String diluluskan melalui rujukan, bermakna rujukan kepada objek String yang sama dikongsi di antara bahagian program yang berlainan. Ini boleh membawa kepada tingkah laku yang tidak dijangka apabila berbilang urutan cuba mengakses objek String yang sama secara serentak.

Kunci untuk menyelesaikan isu ini terletak pada pemahaman bahawa objek String interning memastikan objek tersebut unik untuk setiap nilai. Objek Rentetan Intern disimpan dalam kolam dalam Java Virtual Machine (JVM), dan sebarang percubaan berikutnya untuk mencipta rentetan dengan nilai yang sama akan mengembalikan rujukan kepada rentetan yang diinternir dan bukannya mencipta objek baharu. Ini memastikan bahawa terdapat hanya satu contoh bagi setiap nilai String unik dalam JVM.

Dengan menggunakan Strings yang telah dimasukkan, anda boleh memastikan bahawa kunci yang anda gunakan untuk penyegerakan adalah unik dan semua urutan akan mendapatkan rujukan kepada objek yang sama. Ini akan menghasilkan tingkah laku yang dijangkakan, di mana hanya satu utas pada satu masa memasuki blok disegerakkan untuk melaksanakan operasi get/set.

Untuk melatih objek String, anda boleh menggunakan kaedah intern(). Berikut ialah contoh:

final String key = "Data-" + email;
final String internedKey = key.intern();

Dengan memasukkan rentetan kekunci, anda mencipta objek unik untuknya dan sebarang percubaan seterusnya untuk mencipta rentetan dengan nilai yang sama akan mengembalikan objek yang diintai yang sama. Ini memastikan bahawa rujukan kepada kunci adalah konsisten merentas semua urutan, yang membawa kepada penyegerakan yang betul.

Atas ialah kandungan terperinci Mengapa Penyegerakan pada Objek Rentetan dalam Java Bermasalah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn