Syarat yang perlu dipenuhi oleh objek tidak berubah
(1) Selepas objek dicipta, keadaannya tidak boleh diubah suai
(2) Semua medan objek adalah jenis akhir
(3) Objek dicipta dengan betul (semasa penciptaan objek, rujukan ini tidak melimpah)
Untuk Objek kebolehubah, sila rujuk kelas String dalam JDK
kata kunci akhir: kelas, kaedah, pembolehubah
(1) Kelas diubah suai: Kelas ini tidak boleh diwarisi, Kelas String, kelas pembalut jenis asas (seperti Integer, Long, dll.) adalah semua jenis akhir. Pembolehubah ahli dalam kelas akhir boleh ditetapkan kepada jenis akhir seperti yang diperlukan, tetapi semua kaedah ahli dalam kelas akhir akan secara tersirat ditetapkan sebagai kaedah akhir.
(2) Kaedah pengubahsuaian: Kaedah penguncian tidak diubah suai oleh kelas yang diwarisi; Nota: Kaedah persendirian kelas akan secara tersirat ditetapkan sebagai kaedah akhir
(3) Pembolehubah diubah suai: pembolehubah jenis data asas (nilai tidak boleh diubah suai selepas nilai dimulakan), pembolehubah jenis rujukan (tidak boleh diubah suai selepas pemula) Kemudian tuding pada objek lain)
menyediakan kelas Koleksi dalam JDK, yang menyediakan banyak kaedah bermula dengan tidak boleh diubah suai, seperti berikut:
Collections.unmodifiableXXX: Collection, List, Set , Map... Dalam kaedah Collections.unmodifiableXXX, ia menjadi tidak boleh diubah. Pada masa ini, jika anda mengubah suai elemen dalam Koleksi, Senarai, Set atau Peta, pengecualian java.lang.UnsupportedOperationException akan dilemparkan.
Dalam Guava Google, terdapat banyak kelas bermula dengan Immutable, seperti berikut:
ImmutableXXX, XXX boleh menjadi Collection, List, Set, Map…
Nota: Untuk menggunakan Guava Google, anda perlu menambah pakej pergantungan berikut dalam Maven:
2. Penutupan benang (1) Penutupan benang ad-hoc: pelaksanaan kawalan program, paling teruk, abaikan 所以,在执行ConcurrentSkipListSet中的批量操作时,需要考虑加锁问题。注意:ConcurrentSkipListSet类不允许使用空元素(null)。
ConcurrentHashMap:线程安全,不允许空值
ConcurrentSkipListMap:是TreeMap的线程安全版本,内部是使用SkipList跳表结构实现
(1)ConcurrentSkipListMap中的Key是有序的,ConcurrentHashMap中的Key是无序的;
(2)ConcurrentSkipListMap支持更高的并发,对数据的存取时间和线程数几乎无关,也就是说,在数据量一定的情况下,并发的线程数越多,ConcurrentSkipListMap越能体现出它的优势。
注意:在非对线程下尽量使用TreeMap,另外,对于并发数相对较低的并行程序,可以使用Collections.synchronizedSortedMap,将TreeMap进行包装;对于高并发程序,使用ConcurrentSkipListMap提供更高的并发度;在多线程高并发环境中,需要对Map的键值对进行排序,尽量使用ConcurrentSkipListMap。
Atas ialah kandungan terperinci Contoh analisis strategi keselamatan benang Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!