0

Thread1 と Thread2 という 2 つの異なるクラスに 2 つのスレッドがあります。

スレッド 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(); 別のプログラムの他の場所で発生しますが、両方のスレッドが開始されていると仮定します。

問題は、wait() をスレッド 1 のどこに置くべきかわからないことです。

私が欲しいもの:スレッド1のどこにいても、スレッド2がスレッド1を中断できるようにします。Thread1 の run() メソッドに合計 100 の for ループ、while ループ、if ステートメントがある場合、チェックポイントを配置したくない

if (paused)
{
  wait();
}

Thread1 のこれらのループのすべての内部。どのループ/if ステートメントにいるかに関係なく、Thread1 の run() メソッドを一時停止する方法はありますか? (つまり、現在 Thread1 のどこにいるかに関係なく?)

ありがとう!

4

1 に答える 1

0

必要なのは、suspend別のスレッドのコマンドで、いつでもスレッドにアクセスできることです。その機能は安全でないため、長い間廃止されてきました。

そうです、実際に、スレッドが待機状態に入っても安全なコードにチェックポイントを手動で挿入する必要があります。マルチスレッドは荒い地形であり、それについての王道はありません。

于 2013-11-12T18:53:41.797 に答える