Java 如何仅在当前没有打开其他线程的情况下创建新线程?

Java 如何仅在当前没有打开其他线程的情况下创建新线程?,java,multithreading,Java,Multithreading,此代码创建并启动一个线程: new Thread() { @Override public void run() { try { player.play(); } catch ( Exception e ) { System.out.println(e); } } }.start(); 我想修改这段代码,使线程只在没有其他线程打开时启动!如果有,我想关闭它们,然后启动这个。您可以创建一个ExecutorService,该方法只允许一个线程

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

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

我想修改这段代码,使线程只在没有其他线程打开时启动!如果有,我想关闭它们,然后启动这个。

您可以创建一个
ExecutorService
,该方法只允许一个线程。获得单线程执行器后,可以使用
Runnable
参数调用
execute

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

您可以为该类创建一个静态数据成员(线程发生的地方),该成员在每次调用该类的对象时递增,读取该成员,然后获得启动的线程数

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

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

这里有更多的信息

这就是他想要的,我想,在任何给定的时间只有一个线程在运行。是的,这就是我想要的,在任何给定的时间只有一个线程在运行。我只需要该线程在后台播放音乐,而我仍然可以在前台执行任何操作。好的,我的印象是,您可以运行不同数量的其他线程,但此音乐播放线程可以在必要时关闭它们。这种方法的一个问题是,如果当前在executor中执行的线程花费了很长时间,您的音乐线程将不得不等待它。除非您手动停止它,否则在这种情况下,我看不出有任何理由首先使用executor。这是一个好主意,但如何关闭其他线程?我不会有任何关于它们的参考(我想除了主线程;)