如何仅在当前未打开其他线程时才创建新线程?

2022-09-03 09:40:44

此代码创建并启动一个线程:

new Thread() {
    @Override
    public void run() {
        try { player.play(); }
        catch ( Exception e ) { System.out.println(e); }
    }
}.start();

我想修改此代码,以便线程仅在当时没有其他线程打开时才启动!如果有,我想关闭它们,然后开始这个。


答案 1

您可以使用 Executors.newSingleThreadExecutor 方法创建一个仅允许单个线程的。获得单线程执行器后,可以使用参数进行调用:ExecutorServiceexecuteRunnable

Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { public void run() { /* do something */ } });

答案 2

我的首选方法是在play方法上放置一个同步关键字

synchronized play()

同步方法将锁定函数,因此一次只允许一个线程执行它们。

以下是 https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html