How can I create a new thread only if no other threads are currently open?
This code creates and starts a thread:
new Thread() {
@Override
public void run() {
try { player.play(); }
catch ( Exception e ) { System.out.prin开发者_运维问答tln(e); }
}
}.start();
I'd like to modify this code so that the thread only starts if there are no other threads open at the time! If there are I'd like to close them, and start this one.
You can create an ExecutorService
that only allows a single thread with the Executors.newSingleThreadExecutor
method. Once you get the single thread executor, you can call execute
with a Runnable
parameter:
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { public void run() { /* do something */ } });
My preferred method would be putting a synchronized keyword on the play method
synchronized play()
synchronized methods will lock the function so only one thread will be allowed to execute them at a time.
Here's some more info https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
you could create a static data member for the class(where threading takes place) which is incremented each time an object of that class is called,read that and u get the number of threads started
精彩评论