JDK

Материал из Home Wiki
Версия от 11:56, 13 апреля 2018; FireWolf (обсуждение | вклад) (Новая страница: «= Java Memory Model (JSR 133) - лучшее = https://habrahabr.ru/company/golovachcourses/blog/221133/ == final-поля == Значения для final-…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

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) {
  }
}