|
|
|
Легкие вопросы по volatile и synchronized
|
|||
|---|---|---|---|
|
#18+
Добрый вечер! Никогда не приходилось много работать с многопоточностью, но решил немного освежить знания и разложить все по полочкам. Интересует мнение знающих людей по этому простому примеру. Тут три простецких класса, которые претендует на то, чтобы быть thread-safe. Предполагается что инстанс каждого класса расшарен между разными потоками. Посмотрите мои комментарии, я нигде не ошибаюсь? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Если примитив int мы пометим volatile, то мы можем избавиться от synchronized (volatile означает, что переменная сохраняется не в кэше потока, а в мастер копии, соответственно все потоки будут видеть изменения) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. А вот тут я сомневаюсь, если мы int заменим на String, операция присвоения ссылки атомарна, так что следующий класс тоже получается потокобезопасным? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. А если мы атомарную операцию присваивания заменим инкрементом: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 22:48 |
|
||
|
Легкие вопросы по volatile и synchronized
|
|||
|---|---|---|---|
|
#18+
Да, все куски кода потокобезопасные. Когда volatile используется в synchronized, то второй как мьютекс обычно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 19:32 |
|
||
|
Легкие вопросы по volatile и synchronized
|
|||
|---|---|---|---|
|
#18+
Во всех случаях, кроме последнего достаточно только volatile, в последнем, где инкремент то меняем int -> AtomicInteger и используем инкремент из него, использование synchronized в приведенных случаях избыточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 19:43 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39425219&tid=2123044]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 349ms |

| 0 / 0 |
