2015-05-05 3 views
3

Можно ли с уверенностью сказать, что объект является потокобезопасным в Java, если его класс не содержит переменных экземпляра, которые могут быть изменены, и нет статических переменных?Можно ли назвать объект потокобезопасным или нет?

+0

Да, это безопасно! – Avia

+5

Это безопасно ... если он не расширяет класс, который нет! – Seelenvirtuose

+0

Да, такой объект был бы потокобезопасным. Но, конечно, класс может иметь переменные экземпляра и иметь статические переменные и * ALSO * быть потокобезопасными. Ключевой вопрос: «Как управляется состояние объекта?» Посмотрите здесь: [Что подразумевается под потокобезопасным кодом?] (Http://stackoverflow.com/questions/261683/what-is-meant-by-thread-safe-code) – FoggyDay

ответ

4

Полностью безопасный, если он не распространяется на класс, не подверженный потоку.

Если объект без гражданства, он может безопасно делиться несколькими потоками.

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

+3

Да, но тот факт, что класс объекта не содержит полей экземпляра переменной, это не означает, что объект не имеет состояния. Вам понадобятся суперклассы, чтобы это проверить. – Joffrey

+0

Привет, Жан, Спасибо за ваш ответ! Итак, если кто-то спрашивает, скажем, объект является потокобезопасным или нет? то можно посмотреть на его класс и дать ответ, просто взглянув на состояние. Плс исправить меня, если я ошибаюсь! – Prasad

+1

@Prasad вам также придется посмотреть на свои суперклассы. Тогда, если они тоже без гражданства, вы можете сказать, что это безопасно. ** Однако **, наличие состояния не означает, что он не является потокобезопасным, вам придется исследовать более того, что касается доступа к полям. – Joffrey

Смежные вопросы