这里是我的代码:一次只有一个线程!
new Thread() {
@Override
public void run() {
try { player.play(); }
catch (Exception e) { System.out.println(e); }
}
}.start();
从而创建并启动一个线程。我想修改这段代码,以便只有在当时没有其他线程打开的情况下线程才会启动!如果有我想关闭他们,并开始这一个。提前致谢!
这里是我的代码:一次只有一个线程!
new Thread() {
@Override
public void run() {
try { player.play(); }
catch (Exception e) { System.out.println(e); }
}
}.start();
从而创建并启动一个线程。我想修改这段代码,以便只有在当时没有其他线程打开的情况下线程才会启动!如果有我想关闭他们,并开始这一个。提前致谢!
您可以创建一个ExecutorService
,它只允许使用Executors.newSingleThreadExecutor
方法的单个线程。一旦你获得了单线程执行,你可以调用execute
与Runnable
参数:
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { public void run() { /* do something */ } });
迷人的,不知道是不是我需要这一点,但好知道。 – 2010-01-16 15:17:10
但是,他只能一次运行一个线程。 – danben 2010-01-16 15:17:36
这就是他想要的,我想,在任何给定的时间只能运行一种类型的线程。 – 2010-01-16 15:22:38
,你可以为类创建一个静态数据成员(其中穿线发生),这是每次递增该类的对象被调用,读取和u得到线程的数量开始
这是一个好主意,但那么我将如何关闭其他线程?我不会有任何提及他们的 – 2010-01-16 15:27:04
我的首选方法将放置一个synchronized关键字的播放方法
synchronized play()
同步方法将锁定本功能因此一次只允许一个线程执行它们。
这里有更多的一些信息 https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
(除主线程,我猜;)) – 2010-01-16 16:46:46