我有方法"开始"的主线程。这个方法启动另一个线程,即做长时间工作。方法"开始"可以从另一个线程调用。如何避免在" start"中创建新线程如果已经有一个运行并且没有锁定主线程的方法?我尝试使用singleThreadExecutor,但它排队任务。
代码: 开始方法:
public void start(){
// need only one active thread
// if thread alive, avoid to start another
t = new Thread( new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
}
简单测试
for (int i = 0; i < 100; i++) {
Thread r = new Thread( new Runnable() {
public void run() {
Helper.getInstance().start();
}
});
r.start();
}
答案 0 :(得分:0)
如果您想在当前线程忙时丢弃新任务,可以使用SingleThreadExecutor并将其配置为discard any overflow tasks,而不是将它们排队。