Javaでのwait()、notify()、join()などの方法


Javaではいくつかの方法がよく見られますが、ほとんどの場合、Objectクラスのwait()、notify()、Threadクラスのyield()、join()、sleep()が含まれています.
waitメソッドは、他のスレッドがnotifyでロックと競合するまで、if文ではなくループに配置することを推奨することに注意して、ロックを譲って待つことを示します.
final Object obj = new Object();
Thread t = new Thread(){

            @Override
            public void run() {
                boolean condition = true;
                synchronized (obj) {
                    try {
                        while(condition) {
                            obj.wait();
                            //      

                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t.start();

notifyメソッドは、wait中のスレッドが競合ロックを開始できることを通知し、スレッドスケジューラはランダムにwait中のスレッドを選択し、notifyAllメソッドを呼び出すと、wait中のすべてのスレッドが同時にロックを競合します.注意現在のスレッドnotifyの後、すぐにロックを呼び出すのではなく、同期コードブロックを実行してからロックを呼び出す必要があります.
Thread t = new Thread(){

            @Override
            public void run() {
                synchronized (obj) {
                    //      
                    obj.notifyAll();
                    //            
                }
            }
        };
        t.start();

yieldメソッドThreadのstaticメソッドは,現在のスレッドがCPUを他の同じスレッドに優先させることを喜んでいることを示す.
joinメソッドコードt.join()は、tスレッドの実行が完了するまで呼び出しの下のコードを実行し続けることを示す.(ここでtはThreadオブジェクト)は、次のコードのようになります.
Thread t = new Thread() {

            public void run() {
                System.out.println("        ");
                try {
                    Thread.sleep(3 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("       ");
            }

        };
        t.start();

        try {
            t.join();//t             
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("       ");

結果印刷:
        
       
       

sleepメソッドThreadクラスメソッドは、現在のスリープが一定期間指定されていることを示し、現在所有しているロックを譲らない.