Кто нить сможет пояснить, что будет если не ставить volatile на executorService? Само значение поля меняется из главного потока, нити только стояние объекта с типом executorService меняют... что-то смотрю и не понимаю чего мы избегаем используя volatile...
Алексей
41 уровень
Прошу пояснить зачем тут volatile на executorService?
Обсуждается
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2322530
25 августа 2020, 11:56
чтобы этот "сервис" был один на всех. когда ты поставишь volatile, любые изменения этого объекта отражаются в любых других нитях.
иначе же он поместится в "кэш" и у каждой нити будет своя "копия"
по идее смысл такой.
0
Алексей
25 августа 2020, 12:12
вот тут и не понятно, volatile относиться к значению переменной а не к значению объекта, т.е. у всех перенная с ссылкой на сервис указывает на один сервис, но состояние объекта сервис может отличаться... или я не прав?
0
hidden #2322530
25 августа 2020, 12:20
так изначально переменная то пустая. = null
и каждая нить во время старта тогда будет работать с этой переменной.
а в методе стоп еще "обнулять" эту переменную.
для этого они оба синхронизированные, а сам сервис volatile
0
Алексей
25 августа 2020, 12:33
так у нас разве не в главной ните это происходит? создание сервиса и его обнуление?
0
hidden #2322530
25 августа 2020, 12:39
в конкретно этой задаче да. но подход они видимо хотели показать, когда потоков может быть несколько.
я себе это так представляю, других объяснений нет. иначе какой смысл еще в синхронизированых методах? по сути они как раз работают исключительно с сервисом.
+1
Алексей
25 августа 2020, 12:41
Вот и я смотрю на эту задачу и не понимаю зачем конкретно тут это нужно... Т.е. задача не получается не корректная?
0
hidden #2322530
25 августа 2020, 12:47
не знаю корректная она или нет. я не достаточно компетентен, чтобы так говорить. просто сделал и забыл. я знаю что есть синхронизация и volatile, и пошел дальше.
0
Алексей
25 августа 2020, 12:53
Понимаю, спасибо.
0