在等待Java线程完成时执行其他操作

时间:2018-03-23 21:58:28

标签: java

等待Java线程完成的最佳方法是什么,在做其他事情时?由于我在等待时需要做一些事情,所以我无法使用join()。我打算在isAlive()上进行民意调查,但我已经读到了这一点,但我觉得这对我的情况来说似乎是完美的。此外,我已经看到isAlive()在线程实际开始之前可能返回false的一些迹象(https://stackoverflow.com/a/702427/783314)。虽然这个评论可能只是不正确,因为它似乎与Java文档相矛盾"如果一个线程已经启动并且尚未死亡,那么该线程是活的。" ({{3} })

我想要的基本上就像下面的例子中的stillRunning()。虽然如果有另一个更好,相当简单的替代品做同样的事情,我愿意接受它。

我需要做的就是知道线程何时完成。我不需要以其他方式与之沟通。

public class MyService implements Runnable {   
    public void run() {
        for (int j = 0; j < 5; j++){
            try {
                TimeUnit.SECONDS.sleep(1);
                System.out.println("Hello from a thread!");
            }
            catch (InterruptedException e){
                //don't care
            }
    }

    @RequestMapping(value = "/test")
    @ResponseBody
    void test(HttpServletResponse response) {
        Thread t = (new Thread(new MyService()));
        t.start();
        while (t.stillRunning()){
            System.out.println("Yup, t is still running");
            //do some important stuff while waiting
        }
        System.out.println("Ok, now we know t is done");
    }
}

0 个答案:

没有答案