Как программа может содержать исключительно поточно-ориентированные классы, но не быть поточно-ориентированными? - PullRequest
0 голосов
/ 10 мая 2018

Я читаю «Java-параллелизм на практике», и автор говорит: «Программа, полностью состоящая из поточно-ориентированных классов, может быть не поточно-ориентированной». Как это возможно? Кажется, я не понимаю, кто-то может привести пример?

Ответы [ 2 ]

0 голосов
/ 24 июля 2018

Для большей ясности в этом вопросе.

Из JCIP (утверждение 1):

Является ли поточно-ориентированная программа полностью построенной из поточно-безопасных классов?Не обязательно, что программа, которая полностью состоит из поточно-безопасных классов, может не быть поточно-ориентированной, а поточно-безопасная программа может содержать классы, не являющиеся поточно-безопасными.PP 17

А что B Goetz определяет как потокобезопасный?(оператор 2)

Класс является поточно-ориентированным, если он ведет себя корректно при обращении из нескольких потоков независимо от планирования или чередования выполнения этих потоков средой выполнения и без дополнительной синхронизацииили другое согласование со стороны вызывающего кода.PP 18

Моя интерпретация этих двух утверждений вместе имеет смысл, если мы интерпретируем утверждение 1 как означающее, что класс, выполняющий вызовы полностью поточно-безопасных классов, сам по себе не считается частью набора классов впрограмма.Затем можно построить программу с проблемами «проверяй-то-действуй», операция, которая должна быть атомарной, но ее нет, например, в ответе Энди Тернера выше.

0 голосов
/ 10 мая 2018

Примером могут быть отдельные методы класса, которые являются поточно-ориентированными, но они не являются атомарными, если вы вызываете более одного. Э.Г.

if (!threadSafeCollection.contains(thing)) {
  threadSafeCollection.add(thing);
}

Это может привести к неверным результатам, если другой поток добавляет в коллекцию вызовы contains и add в этом потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...