Page 194 - 6571
P. 194

У  даному  пакеті  визначено  також  класи  AtomicBoolean,
                  AtomicLong,  AtomicReference  і  атомарні  масиви  логічних,
                  цілих,  дробових  значень  та  посилань.  Дані  класи  призначені  в

                  основному для розробників, що проектують різноманітні утиліти
                  паралелізму.
                        Досить часто від асинхронного доступу необхідно захистити

                  певну структуру даних. Наприклад, певний потік виконує запис
                  елемента у хеш-таблицю. Припустимо, цей потік призупиняє своє
                  виконання в процесі переприсвоєння посилань між групами хеш-
                  таблиці.  Якщо  інший  потік  почне  прохід  по  тій  же  самій  хеш-

                  таблиці, то він може «наткнутися» на неправильні посилання, що
                  призведе до появи різноманітних помилок виконання.
                        Захистити будь-яку структуру даних від спільного доступу з

                  декількох потоків можна встановивши блокування, але зазвичай
                  достатньо просто вибрати потокобезпечну реалізацію відповідної
                  структури даних.
                        У  пакеті  java.util.concurrent  представлено  декілька

                  класів,  що  дають  можливість  створювати  потокобезпечні  карти,
                  списки,          множини            та       черги:         ConcurrentHashMap,

                  ConcurrentSkipListMap,                      ConcurrentSkipListSet                       та
                  ConcurrentLinkedQueue.
                        На  відміну  від  «класичних»  колекцій,  метод  size()  в

                  потокобезпечній  колекції  не  гарантує  повернення  правильного
                  розміру колекції. Для визначення розміру однієї із перерахованих
                  вище  колекцій  зазвичай  необхідно  перебрати  всі  її  елементи.

                  Потокобезпечні колекції повертають слабо сумісні ітератори, що
                  дає  змогу  відображати  всі  зміни,  внесені  в  колекцію  після  її
                  створення. Проте, такі ітератори ніколи не повертають одне і те ж
                  саме       значення        двічі      і    не      генерують         виняток        типу

                  ConcurrentModificationException.
                        Потокобезпечна  Хеш-карта  ефективно  підтримує  велику
                  кількість  зчитуючих  потоків  та  фіксовану  кількість  записуючих

                  потоків.  За  замовчуванням  допускається  до  16  паралельно
                  виконуваних  записуючих  потоків.  Якщо  запис  в  колекцію
                  одночасно  виконується  більше  ніж  в  16-ти  потоках,  то  інші

                  потоки тимчасово блокуються. Під час створення у конструкторі
                  можна вказати і більшу кількість потоків, проте на практиці даної
                  кількості цілком вистачає.


                                                             193
   189   190   191   192   193   194   195   196   197   198   199