Создать статический член с целью условие / ожидание Java - PullRequest
4 голосов
/ 19 марта 2012

Можно ли создать статический член в классе, который будет реагировать (если вызывается его метод wait), правильно для потоков, которые не совместно используют один и тот же экземпляр класса (если бы они быть в состоянии уведомить друг друга с помощью notifyAll с использованием поля статического члена)?

1 Ответ

4 голосов
/ 19 марта 2012

Вы можете хранить один экземпляр в статическом поле класса, который может wait иметь любое количество потоков. Где хранится экземпляр, не имеет значения. Ключевым моментом является то, что все потоки имеют доступ к одному и тому же экземпляру - будь то из статического поля / метода или из одноэлементного сервисного объекта или статической локальной переменной.

public class MakeMeWait {
    private static Object semaphore = new Object();

    public static void waitPlease() {
        semaphore.wait();
    }

    public static void wakePlease() {
        semaphore.notifyAll();
    }
}

Хотя в этом примере используются встроенные методы Java wait и notifyAll, гораздо лучше использовать пакет java.util.concurrent, а не использовать собственные решения для многопоточности.

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