【发布时间】:2020-04-13 10:21:09
【问题描述】:
我正在尝试从一个主线程运行一个线程列表,其中一个线程,我们称之为tLast,应该在其他线程进入等待状态后单独启动。我知道t.join,但据我所知,它只有在线程完成工作时才有效,而且据我所知等待不算数。
到目前为止,我在启动所有线程后尝试了这个,但 tLast:
boolean inSleepState = false;
while(!inSleepState){
inSleepState = true;
for(Thread thread: threads){
if(thread.checkState != Thread.state.WAITING){
inSleepState = false;
break;
}
}
}
tLast.start()
我看到的主要问题是,这是一个忙碌的等待,据我所知,这是不好的做法和错误的建议,但我想不出另一种方法来做到这一点。顺便说一句,我意识到我可以单独等待每个线程并在threads 上进行备用迭代,但无论哪种方式,这都是一个忙碌的等待。
【问题讨论】:
-
您可能正在寻找
CountDownLatch。 -
标记前请阅读标记信息。并非所有库例程都有标签。请通过单击标记选项来标记以查看信息并避免拼写错误。
-
当你的线程到达等待状态时,是否可以让你的线程 notify() 一个对象?
-
我真的不明白你为什么想要这样,但如果你的线程处于等待状态,我希望它在等待某个对象,无论是定时等待还是正常等待,你可以调用 latch.countDown(); on每个线程然后调用 latch.await();在调用 tLast.start() 之前
标签: java multithreading concurrency wait