Middle
Java-da hansı thread-safe kolleksiyaları bilirsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Java Collections Framework-də, iki əsas üsulla həyata keçirilmiş çoxmərhələli kolleksiyalar mövcuddur:
-
Sinxronizasiya olunmuş qablar (Synchronized Wrappers):
- Adi, çoxmərhələli olmayan kolleksiyaları (məsələn,
ArrayList,HashMap,HashSet) əhatə edir. - Kolleksiyanın bütün metodları sinxronlaşdırılıb.
- Sinxron kolleksiyalar əldə etmək nümunəsi:
// Sinxron siyahı əldə etmək List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>()); // Sinxron dəst əldə etmək Set<String> synchronizedSet = Collections.synchronizedSet(new HashSet<>()); // Sinxron xəritə əldə etmək Map<String, String> synchronizedMap = Collections.synchronizedMap(new HashMap<>()); - Əksiklik: Yüksək paralellik səviyyəsində aşağı performans, çünki kilid bütün kolleksiyaya təsir edir.
- Adi, çoxmərhələli olmayan kolleksiyaları (məsələn,
-
java.util.concurrentpaketindən kolleksiyalar:- Xüsusi olaraq çoxmərhələli mühit üçün hazırlanmışdır.
- Müxtəlif mexanizmlər (məsələn, kiçik detallı kilid, CAS əməliyyatları) vasitəsilə çoxmərhələli təhlükəsizlik təmin edir.
- Sinxronizasiyalı qablar ilə müqayisədə, paralel əməliyyatlar üçün daha yaxşı performans göstərir.
- Əsas nümunələr:
ConcurrentHashMap: Yüksək keçirmə qabiliyyəti ilə çoxmərhələliMap-in təhlükəsiz tətbiqi.CopyOnWriteArrayList: Dəyişiklik zamanı əsas massivinin yeni nüsxəsini yaradan siyahı. Tez-tez oxuma və az yazma əməliyyatları üçün uyğundur.CopyOnWriteArraySet:CopyOnWriteArrayList-ə bənzər, lakin dəstlər üçün.ConcurrentLinkedQueue: Kilidsiz, çoxmərhələli olmayanQueuetətbiqi.ConcurrentLinkedDeque: Kilidsiz, çoxmərhələli olmayanDequetətbiqi.ConcurrentSkipListMap: Ölçülən, çoxmərhələli, təhlükəsizSortedMaptətbiqi.ConcurrentSkipListSet: Ölçülən, çoxmərhələli, təhlükəsizSortedSettətbiqi.- Bloklayan növbələr (
BlockingQueue,BlockingDeque) - məsələn,ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue,DelayQueue,SynchronousQueue,LinkedTransferQueue. Bu, istehsalçı və istehlakçıların koordinasiyası üçün istifadə olunur.
Seçim, sinxronizasiya olunmuş qablar və java.util.concurrent kolleksiyaları arasında, performans tələbləri və çoxmərhələli mühitdə istifadə xarakterinə əsaslanır (oxuma/yazma əməliyyatlarının tezliyi, paralellik səviyyəsi). Müasir çoxmərhələli tətbiqlərdə, java.util.concurrent kolleksiyalarından istifadə üstünlük təşkil edir.