一次只有一个线程!
这是我的代码:
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
你可以为类创建一个静态数据成员(发生线程的地方),每次调用该类的对象时都会增加,读取它并获得启动的线程数