Sobes.tech
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:

  1. 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.
  2. java.util.concurrent paketində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əli Map-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 olmayan Queue tətbiqi.
      • ConcurrentLinkedDeque: Kilidsiz, çoxmərhələli olmayan Deque tətbiqi.
      • ConcurrentSkipListMap: Ölçülən, çoxmərhələli, təhlükəsiz SortedMap tətbiqi.
      • ConcurrentSkipListSet: Ölçülən, çoxmərhələli, təhlükəsiz SortedSet tə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.