多线程:Java中的wait()和notify()是否到处都没有检查点?
我在两个不同的类中有两个线程,Thread1和Thread2 在线程1中,我有如下内容:多线程:Java中的wait()和notify()是否到处都没有检查点?,java,multithreading,wait,notify,Java,Multithreading,Wait,Notify,我在两个不同的类中有两个线程,Thread1和Thread2 在线程1中,我有如下内容: public class Thread1 { public static boolean pause = false; public void run() { while(true) { synchronized (myLock) { for (int i=0; i<
public class Thread1
{
public static boolean pause = false;
public void run()
{
while(true)
{
synchronized (myLock)
{
for (int i=0; i<5; i++)
{
//a for loop
}
if (someCondition1)
{
//an if statement
}
while (someCondition2)
{
//a while loop
}
}
}
}
}
public void run()
{
Thread1.pause=true;
synchronized(myLock)
{
//do some mutually exclusive task while Thread1 waits
}
Thread1.pause=false;
myLock.notify();
}
}
当然,Thread1.start();和Thread2.start();在另一个程序的其他地方发生,但假设两个线程都已启动
问题是我不知道将wait()放在线程1的何处
我想要的是:线程2能够中断线程1,而不管我在线程1中的什么位置。如果在Thread1的run()方法中总共有100个for循环、while循环和If语句,我不想设置检查点
if (paused)
{
wait();
}
在Thread1中的每个循环中。有没有一种方法可以暂停Thread1的run()方法,而不管我在哪个循环/if语句中?(即,无论我目前在Thread1的何处?)
谢谢 您想要的是能够在任何时候,根据另一个线程的命令,挂起一个线程。这种能力已经存在很长时间了,因为它不安全
因此,是的,您实际上必须手动将检查点插入到代码中,这样线程才能安全地进入等待状态。多线程是一个艰难的过程,没有什么好办法。你确定线程1中有100个
循环,或者这只是夸大了效果?假设你写的东西相当理智,你在问题中概述的方法似乎是完全明智的。如果是嵌套循环,请检查外部循环中的暂停。好的,抱歉,这有点夸张,但我确实有很多循环和If语句。。Thread1的run()中的嵌套循环和嵌套语句基本上我希望Thread1的run()中有无限多个检查点“wait()”,但这并不实际……在kaveri APU中,您可以将Thread1用作“集成gpu”的opencl(jocl/Aparabi)内核,并从CPU内核(常规线程)控制myLock。您可能需要将myLock作为内核参数传递,以便具有相同的地址。