java:当前alive

时间:2016-02-19 11:26:04

标签: java multithreading locking

我有方法"开始"的主线程。这个方法启动另一个线程,即做长时间工作。方法"开始"可以从另一个线程调用。如何避免在" 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();      
   }    

1 个答案:

答案 0 :(得分:0)

如果您想在当前线程忙时丢弃新任务,可以使用SingleThreadExecutor并将其配置为discard any overflow tasks,而不是将它们排队。