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