Может кто-нибудь объяснить безопасность темы с точки зрения непрофессионала? - PullRequest
2 голосов
/ 15 сентября 2011

Несмотря на то, что я читаю википедию и тому подобное, я все еще не совсем понимаю, что означает безопасность потоков в смысле программирования.Кто-нибудь может дать некоторые примеры Java в терминах непрофессионала?Например, что делает поток безопасным против потока небезопасным?

Спасибо!

Ответы [ 3 ]

8 голосов
/ 15 сентября 2011

Я думаю, что полезно думать о конкретных вещах вне компьютера.(Параллельное программирование делалось задолго до изобретения цифровых компьютеров.)

Автомобиль - это процесс.Пересечение является общим ресурсом.Если индикатор горит зеленым в нескольких направлениях одновременно, то, вероятно, он не безопасен для потоков.

2 голосов
/ 15 сентября 2011

Это нечеткий термин - нет точного соглашения о том, что он на самом деле означает.

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

То есть - код считается потокобезопасным, если он может вызываться из нескольких потоков одновременно и гарантированно не вызывает ошибок.

0 голосов
/ 15 сентября 2011

Дело не в том, что нить безопасна или нет. Это то, как состояние ваших объектов защищено от обновления несколькими потоками. Таким образом, это безопасно, если только один поток может обновлять переменную одновременно, чтобы вы не столкнулись с каким-то непоследовательным или непредсказуемым состоянием.

Пример небезопасного потока: у вас есть объект, у которого есть переменная экземпляра, в которой хранится список элементов, которые 1 метод в этом объекте использует для хранения результатов вычислений, которые он вернет после завершения. Если два потока вызывают этот метод одновременно, оба экземпляра этого запущенного метода попытаются обновить один и тот же список, чтобы результаты методов были смешаны.

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