Класс Blackberry Семафор - PullRequest
       15

Класс Blackberry Семафор

2 голосов
/ 30 октября 2009

Я не могу найти ничего эквивалентного семафору в справочнике по Blackberry Java. Что мне не хватает? java.util.concurrent даже там нет.

Спасибо! Шон

Ответы [ 2 ]

1 голос
/ 30 октября 2009

Так что для любого, кто сталкивается с этим, отличный ответ Coldice приводит меня на эту страницу, которая объясняет, как реализовать различные типы семафоров с использованием примитивов ожидания / уведомления, доступных в J2ME http://tutorials.jenkov.com/java-concurrency/semaphores.html. Спасибо!

0 голосов
/ 30 октября 2009

С Использование потоков в приложениях J2ME. Автор Eric Giguere :

Монитор поддерживает очередь ожидающих потоков, позволяя только одному потоку одновременно входить в блок.

Поскольку каждый объект Java может выступать в качестве монитора, класс java.lang.Object определяет три метода, которые предоставляют эту базовую функциональность: wait (), notify () и notifyAll (). Любой поток может приостановить себя, вызвав метод wait () объекта:

...
Object obj = .... // some object to use as a lock

synchronized( obj ){
    // here is where you'd check obj's state

    try {
    obj.wait();
    }
    catch( InterruptedException e ){
    }
}
...

Поток должен заблокировать объект перед вызовом его метода wait (). Он также должен перехватывать исключение java.lang.InterruptedException и соответствующим образом обрабатывать прерывания потоков. Поток неявно освобождает свою блокировку для объекта после того, как он приостанавливает себя.

Метод wait () перегружен: поток может указать необязательный тайм-аут в миллисекундах, если не хочет ждать бесконечно.

Как только поток приостанавливает себя, другой поток освобождает его, вызывая метод notify () или notifyAll () того же объекта:

...
Object obj = .... // same object used as lock!

synchronized( obj ){
    obj.notify();  // or notifyAll
}
...

Опять же, второй поток должен заблокировать объект перед вызовом notify () или notifyAll (). Эти два метода ведут себя одинаково, за исключением того, что один пробуждает один ожидающий поток, а другой пробуждает все ожидающие потоки. Порядок пробуждения потоков не указан. Каждый вновь пробудившийся поток должен повторно получить свою блокировку на объекте, прежде чем он сможет фактически продолжаться, потому что его блокировка на объект была неявно снята, когда он приостановил себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...