Материал из Home Wiki
(Различия между страницами)
Перейти к навигации
Перейти к поиску
|
|
Строка 1: |
Строка 1: |
| = Java Memory Model (JSR 133) - лучшее =
| |
|
| |
|
| https://habrahabr.ru/company/golovachcourses/blog/221133/
| |
|
| |
| == final-поля ==
| |
|
| |
|
| |
| Значения для final-полей объекта задаются в конструкторе. Если предположить, что объект построен «правильно», то как только объект построен, значения, присвоенные final-полям в конструкторе будут видны всем другим потокам без синхронизации.
| |
|
| |
| Пример:
| |
| <syntaxhighlight>
| |
| public FinalFieldExample() { // bad!
| |
| x = 3;
| |
| y = 4;
| |
| // bad construction - allowing this to escape
| |
| global.obj = this;
| |
| }
| |
| </syntaxhighlight>
| |
|
| |
| в этом случае нет гарантии, что поток, прочитавший ссылку на данный объект из global.obj прочитает 3 из x.
| |
|
| |
| Или не явный пример:
| |
| <syntaxhighlight>
| |
| public class EventListener2 {
| |
| public EventListener2(EventSource eventSource) {
| |
|
| |
| eventSource.registerListener(
| |
| new EventListener() {
| |
| public void onEvent(Event e) {
| |
| eventReceived(e);
| |
| }
| |
| });
| |
| }
| |
|
| |
| public void eventReceived(Event e) {
| |
| }
| |
| }
| |
| </syntaxhighlight>
| |
Текущая версия на 08:58, 9 июня 2018