Для большей ясности в этом вопросе.
Из JCIP (утверждение 1):
Является ли поточно-ориентированная программа полностью построенной из поточно-безопасных классов?Не обязательно, что программа, которая полностью состоит из поточно-безопасных классов, может не быть поточно-ориентированной, а поточно-безопасная программа может содержать классы, не являющиеся поточно-безопасными.PP 17
А что B Goetz определяет как потокобезопасный?(оператор 2)
Класс является поточно-ориентированным, если он ведет себя корректно при обращении из нескольких потоков независимо от планирования или чередования выполнения этих потоков средой выполнения и без дополнительной синхронизацииили другое согласование со стороны вызывающего кода.PP 18
Моя интерпретация этих двух утверждений вместе имеет смысл, если мы интерпретируем утверждение 1 как означающее, что класс, выполняющий вызовы полностью поточно-безопасных классов, сам по себе не считается частью набора классов впрограмма.Затем можно построить программу с проблемами «проверяй-то-действуй», операция, которая должна быть атомарной, но ее нет, например, в ответе Энди Тернера выше.