启动线程对象后
thread1.start();
thread2.start();
我需要使用join()方法(最常见的方法)等待两个线程的最终确定。
喜欢这个。
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
我看到的所有教程都使用了一些内置的方法来完成线程。
有没有办法在不使用任何内置方法(如join或executor)的情况下等待线程终结?
答案 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);
}
}