Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Оцените дизайн сайта, пожалуйста.   Найти похожие ветки 

 
Gero ©   (2004-12-29 21:24) [40]


> iZEN ©   (29.12.04 20:48)

Not found.


 
iZEN ©   (2004-12-29 22:17) [41]

to Gero ©   (29.12.04 21:24) [40]
Это он [jigsaw.w3.org] так перегружен - сам на него с пятого раза запостил. (-;

to TUser ©   (29.12.04 14:27) [29]
Вот фрагмент кода:
/**
   * Увеличивает внутренний счетчик,
   * возможно активирует нить.
   */
  public synchronized void release() {
     if (counter == 0) {
        this.notify();
     }
     counter++;
  }
  /**
   * Уменьшает счетчик или блокирует,
   * если тот равен 0
   * @throws InterruptedException передается из this.wait().
   */
  public synchronized void acquire() throws InterruptedException {
     while (counter == 0) {
        this.wait();
     }
     counter--;
  }

Ваши аргументы надуманны из-за непонимания семантики synchronized-методов в Java. У каждого объекта (и ещё у каждого класса, кстати) есть внутренний монитор, который связывается во время исполнения JVM с synchronized-методами: два и более потока (нити) не могут одновременно исполнять не то что единственный synchronized-метод но и любые два и более synchronized-метода объекта. Поэтому код release() с acquire() будет выполняться всегда последовательно - один за другим, вне зависимости от того, сколько потоков  (нитей) работает с семафором.
Комментарии:
this.notify() освобождает внутренний монитор объекта для первого попавшегося ожидающего (блокированного на мониторе) потока (нити);
this.wait() - единовременная блокировка потока (нити) на мониторе объекта - монитор взводится для конкретного потока (нити);
цикл while (counter == 0) {...} - виток - нужен для блокировки всех потоков (нитей), если они обращаются к коду при counter == 0.



Страницы: 1 2 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.062 c
14-1104048362
Чеширский_Кот
2004-12-26 11:06
2005.01.16
Где именинники?


14-1104255562
Sun bittern
2004-12-28 20:39
2005.01.16
Такс, где тут линуксоиды? :)


1-1104146905
tradakad
2004-12-27 14:28
2005.01.16
СВойства итема PopupMenu


14-1103960552
Поручик
2004-12-25 10:42
2005.01.16
SATA


3-1102604292
_Вован_
2004-12-09 17:58
2005.01.16
Как физически удалить запись из таблички dBase (файла .dbf) ?