0

我在两个不同的类 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
                }

            }
        }
    }
}

在线程 2 我有这样的事情:

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(); 发生在另一个程序的其他地方,但假设两个线程都已启动。

问题是我不知道在线程 1 中将 wait() 放在哪里。

我想要什么:无论我在 Thread1 中的哪个位置,线程 2 都能够中断 Thread1。如果我在 Thread1 的 run() 方法中总共有 100 个 for 循环、while 循环和 if 语句,我不想​​设置检查点

if (paused)
{
  wait();
}

在 Thread1 中的每个循环中。有没有办法暂停 Thread1 的 run() 方法,不管我在哪个循环/if 语句中?(即无论我目前在 Thread1 中的哪个位置?)

谢谢!

4

1 回答 1

0

您想要的是在suspend另一个线程的命令下随时访问一个线程的能力。由于不安全,该功能已被弃用很长时间。

所以是的,您实际上必须手动将检查点插入到您的代码中,线程可以安全地进入等待状态。多线程是一个崎岖的地形,没有王道。

于 2013-11-12T18:53:41.797 回答