多线程:Java中的wait()和notify()是否到处都没有检查点?

多线程: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<

我在两个不同的类中有两个线程,Thread1和Thread2

在线程1中,我有如下内容:

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作为内核参数传递,以便具有相同的地址。