пятница, 25 сентября 2009 г.

лекция #1: happend-before

    Отношение Happend-Before устанавливается в нескольких случаях. Мы рассмотрели 3 из них (не все):
    1. Если один поток записал в volatile переменную, а другой считал из нее же (две записи, два чтения, чтение потом запись не устанавливают отношние).
    2. Если один поток выполнил Thread.start(), а второй - это стартонувший поток. Если один поток вышел из своего метода run() а второй ожидал его окончания по Thread.join().
    3. Если один поток освободил монитор объекта(вышел из синхронизированной секции), а второй захватил монитор того же объекта (вошел в синхронизированную секцию).

2 комментария:

  1. Re: Если один поток записал в volatile переменную, а другой считал из нее же...
    ... значение записанное первым потоком.

    ОтветитьУдалить
  2. Да, конечно. Пожалуй даже стоит это как-то еще расширить. Иначе не совсем понятно, что значит "значение записанное первым потоком". Я бы зазвал это АА-проблема. Если в переменной было значение A и первый поток записываем туда A, то второй поток не может узнать считал ли он первое А или второе А:)

    ОтветитьУдалить