Vector
синхронізується на кожній окремій операції. Це майже ніколи те, що ви хочете зробити.
Як правило, ви хочете синхронізувати цілу послідовність операцій. Синхронізація окремих операцій є і менш безпечною (наприклад, якщо ви повторюєте Vector
, наприклад, вам все одно потрібно зняти замок, щоб уникнути того, щоб хтось міняв колекцію одночасно, що призведе ConcurrentModificationException
до ітераційного потоку), але також повільніше ( навіщо брати замок повторно, коли одного разу буде достатньо)?
Звичайно, він також має накладні витрати, навіть коли вам цього не потрібно.
В основному, це дуже хибний підхід до синхронізації в більшості ситуацій. Як зазначав містер Брайан Хенк , ви можете прикрасити колекцію, використовуючи такі дзвінки, як Collections.synchronizedList
- той факт, що Vector
поєднує в собі реалізацію колекції "зміненого масиву" та біт "синхронізувати кожну операцію", є ще одним прикладом поганого дизайну; підхід до декорування дає більш чітке розділення проблем.
Що стосується Stack
еквівалента - я б дивився Deque
/ ArrayDeque
для початку.