В чем разница между потокобезопасностью и совместимостью потоков? - PullRequest
0 голосов
/ 09 октября 2018

В чем разница между потокобезопасностью и совместимостью с потоками?

  • Что означает совместимость с потоками?
  • Что такое варианты использования для совместимости с потоками?

UPD: Я нашел это определение в документации grpc StreamObserver .

Также я нашел ссылку на Характеристика безопасности потока но для меня все еще неясно.

Если метод должен находиться в блоке синхронизации, это означает, что он просто небезопасен?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Похоже, что определение thread compatible принадлежит Джошуа Блоху в Effective Java 1st edition .Для чего бы это ни стоило, этого нет во втором издании.Во втором издании мы имеем следующую таксономию

  • неизменяемый
  • безусловно потокобезопасный
  • условно потокобезопасный
  • не потокобезопасный
  • враждебный поток

Мне кажется, что thread compatible был переименован в not thread-safe.

0 голосов
/ 10 октября 2018

Потокобезопасный означает, что объект может использоваться многими потоками одновременно и при этом быть правильным 1

Поток враждебен означает, что объект что-то делает(изменяет статическое состояние, локальное хранилище потока и т. д.), что препятствует его поточной безопасности.

Потоковая совместимость означает не поточная безопасность , но не нитьhostile - поэтому для обеспечения безопасности потока пользователь должен выполнить синхронизацию самостоятельно


1 Но определение правильности немного различается ...

Java в теории и на практике определяет это в соответствии со спецификацией класса.

Джефф Ромер в Google и Википедии определяют это как просто отсутствие гонок данных.

Я обычно надеюсь, что это означает отсутствие сбоев, тупиков или других неожиданностей.

...