我有两个线程。在他们每个人中,我正在运行一个调度程序。为什么当前线程在返回值之前没有等待其他线程?
Thread one = new Thread(
() -> scheduler.scheduleAtFixedRate(eventMaker, 0, 1, MICROSECONDS)
);
Thread two = new Thread(
() -> timeChecker.schedule(timeAnalyser, 1, TimeUnit.SECONDS)
);
然后,我开始他们并调用它们join()
作出方法,其中,它们被初始化,等他们返回的返回值之前完成。
threads = new Thread[2];
threads[0] = one;
threads[1] = two;
for (int i = 0; i < threads.length; i++) {
threads[i].start();
}
for (int i = 0; i < threads.length; i++) {
threads[i].join();
}
return a;
但仍然调用它们的方法不会等待它们。即使调用join()
,它立即返回值。如何在返回之前等待线程?
您的帮助,将不胜感激。
因此,如何才能使用这些'get'方法来实现方法在调度程序完成后立即返回值? – testiguy
我现在通过在'return'之前加入'while(!timerFuture.isDone()){}'来解决它,但我想那不是一个好习惯。我怎样才能更好地解决这个问题? – testiguy
@testiguy你的意思是什么?一旦调度员完成了_?对于调用'schedule',因为它只会执行一次,所以使用'get'。它阻塞线程直到任务完成。对于'scheduleAtFixedRate',任务重复,所以没有“完成”。 –