Как я могу создать новую тему, только если в данный момент нет открытых тем?
Этот код создает и запускает поток:
new Thread() {
@Override
public void run() {
try { player.play(); }
catch ( Exception e ) { System.out.println(e); }
}
}.start();
Я хотел бы изменить этот код так, чтобы поток запускался только в том случае, если в это время не было открыто никаких других потоков! Если есть, я хотел бы закрыть их и начать этот.
Ответы
Ответ 1
Вы можете создать ExecutorService
, который разрешает только один поток с помощью метода Executors.newSingleThreadExecutor
. После того как вы получите исполнитель одиночного потока, вы можете вызвать execute
с параметром Runnable
:
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { public void run() { /* do something */ } });
Ответ 2
Моим предпочтительным методом было бы поставить синхронизированное ключевое слово в методе воспроизведения
synchronized play()
синхронизированные методы блокируют функцию, поэтому только одному потоку будет разрешено выполнять их за раз.
Вот еще информация
https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
Ответ 3
вы можете создать статический член данных для класса (где выполняется потоковая передача), который увеличивается каждый раз, когда вызывается объект этого класса, читайте, что и вы получаете количество запущенных потоков