How can I create a new thread only if no other threads are currently open?

后端 未结 3 800
傲寒
傲寒 2021-01-01 19:40

This code creates and starts a thread:

new Thread() {
    @Override
    public void run() {
        try { player.play(); }
        catch ( Exception e ) { Sy         


        
相关标签:
3条回答
  • 2021-01-01 20:23

    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

    0 讨论(0)
  • 2021-01-01 20:23

    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

    0 讨论(0)
  • 2021-01-01 20:33

    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 */ } });
    
    0 讨论(0)
提交回复
热议问题