自定义方式等待所有线程在Java中完成?

时间:2017-04-29 16:35:53

标签: java multithreading

启动线程对象后

thread1.start();
thread2.start(); 

我需要使用join()方法(最常见的方法)等待两个线程的最终确定。

喜欢这个。

try {
      thread1.join();
      thread2.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

我看到的所有教程都使用了一些内置的方法来完成线程。

有没有办法在不使用任何内置方法(如join或executor)的情况下等待线程终结?

1 个答案:

答案 0 :(得分:0)

每个线程都有一个状态。 NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING或 封端的

TERMINATED是一种状态,您可以使用thread.getState()方法查找每个线程,这是完成执行后线程的状态

// 2 Thread Object 
            Thread threads[] = new Thread[2];
            // store Thread Statuses
            Thread.State status[] = new Thread.State[2];

因为All Thread有状态。在开始线程存储之前 他们的州

for (int i = 0; i < 2; i++) {
        status[i] = threads[i].getState();
                }

一旦启动线程                 完成的Thread有一个Terminated状态,你可以使用它                 并编写自己的支票以进行最终确定

    // custom way for finalization of the threads
     boolean finish = false; // initially all non finised 
     while(!finish) {
            for (int i = 0; i < 2; i++) {
                if (threads[i].getState() != status[i]) {
                    status[i] = threads[i].getState();
                    }
                }
            finish = true;
            for (int i = 0; i < 2; i++) {
            finish = finish && (threads[i].getState() ==
                                State.TERMINATED);
                }
 }