是否有可能让一根线进入睡眠状态,在它本身



我正在用java试验多线程,基本上我想做两个线程,并让它们计为一个数字。

但是当他们达到一半时,他们会睡一段时间。所以我在考虑在 FOR 循环中放置一个 IF 语句,看看它何时到达一半,然后如果它到达了一半,它将让自己进入睡眠状态。

我正在运行单核 CPU atm,因为我在学校的计算机上,所以在 theroy 中,当我将第一个线程置于睡眠状态时,第二个线程应该启动吗?

另外,是否可以将第一个线程从第二个线程置于睡眠状态,反之亦然?

您可以使用以下Thread.sleep(int milliseconds)

导致当前正在执行的线程休眠(暂时停止 执行)的指定毫秒数,受 系统计时器和调度程序的精度和准确性。线程 不会失去任何显示器的所有权。

至于使一个线程暂停另一个线程,您可以公开其他线程可以调用的方法以暂停其他线程的执行。

就像任何其他多线程程序一样,请留意竞争条件。

至于您的另一个问题,单核处理器应该能够运行多个线程,因此内核的数量(在这种情况下)并不重要。

线程

只能使用 Thread.sleep 使自己休眠。即使在单核 CPU 上运行时,JVM 也会为所有可运行的线程安排时间。如果您想更好地控制每个线程的运行时间,则需要查看java.util.concurrent包中的信号量和其他锁定/调度机制。

提出更具体的问题,以获得有关您在项目中停留的位置的帮助。

当你开始让一个线程让另一个线程进入睡眠状态,然后让自己进入睡眠状态时,你非常接近比赛/死锁条件:

http://en.wikipedia.org/wiki/Deadlock#Necessary_conditions

我建议你看看这本书 它几乎涵盖了有关Java和并发/多线程的所有内容,包括编码原理和许多示例。在爪哇中为Conucurrency预订

对于问题的第一部分:

执行到达第一个线程中的 sleep() 语句时,第二个线程可能已经完成。这是因为 JVM 不是根据每个线程的启动时间,而是基于复杂的调度算法将 CPU 时间分配给线程。调用 Thread.sleep(1000) 时唯一可以保证的是线程将在该点停止执行至少 1000 毫秒。

第二部分 - 让一个线程从另一个线程进入睡眠状态 - 已被其他人很好地解决。您需要注意竞争条件。

相关内容

最新更新