以下のコードをご覧ください。
クラス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");
}
}
私の考えが正しいかどうか教えてください。これを達成する他の方法を提案してください。