2

以下のコードをご覧ください。

クラスA

package generalscenarios;

public class A implements Runnable{

    public void run(){

        System.out.println("dsad");

    }

}

クラスB

package generalscenarios;


public class B {


    public static void main(String[] args) throws InterruptedException {

        A a1  = new A();
        Thread a = new Thread(a1);
        a.start();
        System.out.println("hi");
    }
}

クラスBを実行すると、私のスレッドaはメインスレッドによって開始され、hiはメインスレッドによってコンソールに出力されます。ただし、「hi」と「dsad」の印刷順序は決まっていません。

「dsad」の後に「hi」を印刷してほしい。

私が考えた解決策は、メインスレッドとスレッド「a」の間で共有変数を取得することです。メインスレッドは、タイムスレッド「a」が通知するまでその変数を待機します。

クラスA

package generalscenarios;

public class A implements Runnable{

    public void run(){

        System.out.println("dsad");
        synchronized (this) {
            this.notify();  
        }


    }

}

クラスB

package generalscenarios;


public class B {


    public static void main(String[] args) throws InterruptedException {

        A a1  = new A();
        Thread a = new Thread(a1);
        a.start();
        synchronized (a1) {
            a1.wait();
        }
        System.out.println("hi");
    }
}

私の考えが正しいかどうか教えてください。これを達成する他の方法を提案してください。

4

1 に答える 1

6

あなたは次のようなことを試すことができます

public static void main(String[] args) throws InterruptedException {

    A a1  = new A();
    Thread a = new Thread(a1);
    a.start();
    a.join();
    System.out.println("hi");
}

Thread.join()を読んでください。また、の完全なリファレンスも読んでくださいThread

于 2012-05-18T08:57:53.360 に答える