一次只有一个线程!

这是我的代码:

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

它创建并启动一个线程。 我想修改这段代码,以便线程只在当时没有其他线程打开时才会启动! 如果有我想关闭它们,并开始这个。 提前致谢!

您可以创建一个ExecutorService ,它只允许使用Executors.newSingleThreadExecutor方法的单个线程。 获得单线程执行程序后,可以使用Runnable参数调用execute

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

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

 synchronized play() 

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

这里有更多信息https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html

你可以为类创建一个静态数据成员(发生线程的地方),每次调用该类的对象时都会增加,读取它并获得启动的线程数