gpt4 book ai didi

java - 在java中,有没有办法在线程进入等待状态而不是完成时将其设为 "Join"?

转载 作者:行者123 更新时间:2023-12-02 09:10:51 25 4
gpt4 key购买 nike

我正在尝试从主线程运行一个线程列表,其中一个线程(我们称之为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()

我看到的主要问题是,这是一个忙碌的等待,据我所知,这是不好的做法,也是不明智的,但我想不出另一种方法来做到这一点。顺便说一句,我意识到我可以单独等待每个线程并在线程上进行备用迭代,但无论哪种方式,这都是一个繁忙的等待。

最佳答案

join 方法仅在线程终止后才与该线程连接。处于 WAITING 状态的线程不会终止。

所以直接的答案是你不能加入等待线程。

但另一方面,Thread::join 不会执行繁忙等待。

要注意的第三件事是依赖线程的状态来指示某些内容是相当粗糙的。如果线程处于等待状态,则表明它正在等待某个互斥锁的通知。它不会告诉您它正在使用哪个互斥锁。

现在...大概...您希望当其他线程达到特定状态时唤醒您的 tLast 线程。如果这就是您想要实现的目标,您可能需要 CountdownLatchSemaphoreCyclicBarrier

关于java - 在java中,有没有办法在线程进入等待状态而不是完成时将其设为 "Join"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59433110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com