Javaはマルチスレッド-joinを使用しています

アクションに参加

役割は、待機中のスレッドオブジェクトが破壊される参加します。

作用の方法は、スレッドオブジェクトXに参加することである属するタスクの通常の実行run()メソッドは、現在のスレッドが無期限にZをブロックし、その後、待機中のスレッドのZ X破壊後に、現在のスレッドの背後にあるコードを継続しています。

注意:

この方法は、参加する場合は()と割り込み()メソッドは、例外がスローされ遭遇。例としては、次のとおりです:

パブリック クラスJoinException {
     公共 静的 ボイドメイン(文字列[]引数){
         試み{ 
            ThreadB B = 新しいThreadB()。
            b.start(); 
            Thread.sleep( 500 )。
            ThreadC C = 新しいThreadC(B)。
            c.start(); 
        } キャッチ(InterruptedExceptionある電子){ 
            e.printStackTrace(); 
        } 
    } 

    静的 クラススレッドAが延びスレッド{ 
        @Override 
        公開 無効実行(){
             のためには、int型は、私は= 0;私<Integer.MAX_VALUEでは、I ++ ){ 
                文字列NEWSTRING = 新しい文字列(); 
                Math.random(); 
            } 
        } 
    } 

    静的 クラス ThreadBは延びスレッド{ 
        @Override 
        公共 ボイドラン(){
             試み{ 
                スレッド = 新しいスレッドAを(); 
                a.start(); 
                a.join(); 
                System.out.printlnは("Bがで実行最終的に印刷されたスレッド" ); 
            } キャッチ(InterruptedExceptionあるE)は{ 
                のSystem.out.printlnは( "のキャッチスレッドBに印刷" ); 
                e.printStackTrace(); 
            } 
        } 
    } 

    静的 クラス ThreadCが延びているスレッド{
         プライベートとThreadB ThreadBその; 

        公共ThreadC(及びThreadB ThreadBこと){
             この .threadB = ThreadB; 
        } 

        @Override 
        公共 ボイドRUN(){ 
            threadB.interrupt(); 
        } 
    } 
}

結果は以下の通りであります:

 

 

ロックを解除する)(参加

Thread.sleep()はロックを解除しません。join()メソッドは、ロックを解除します

この方法は、(長い)機能に参加し、内部ので、(長い)メソッドがロックを解除する機能参加、達成するために、(long)メソッドを待って使用されています。

この方法は、(長い)ソースコードに参加以下の通りであります:

 

事前の背後で実行する方法参加()コード:予期しません

事故への参加()の時間パラメータが発生しやすい設定します(長いミリ秒)に参加。例としては、次のとおりです:

ヒント:最終的な解決策はb.joinにある(2000年)に置き換えb.join()

パブリック クラスJoinTest {
     公共 静的 ボイドメイン(文字列[]引数){
         試み{ 
            ThreadB B = 新しいThreadB()。
            スレッドA A = 新しいスレッドA(B)。
            a.start(); 
            b.start(); 
            b.join( 2000 ); 
            System.out.println( "主EDN" + のSystem.currentTimeMillis())。
        } キャッチ(InterruptedExceptionある電子){ 
            e.printStackTrace(); 
        } 
    } 

    静的 クラススレッドAが延びスレッド{
         プライベートThreadB bを、

        パブリックスレッドA(ThreadB b)は{
             この .B = B。
        } 

        @Override 
        公共 ボイドラン(){
             同期(B){
                 試み{ 
                    するSystem.out.println( "始まるAのthreadName =" +にThread.currentThread()のgetName()+ "" + のSystem.currentTimeMillis())。
                    Thread.sleep( 5000 ); 
                    System.out.println( "AのthreadNameを終了=" +にThread.currentThread()のgetName()+ "" +System.currentTimeMillis())。
                } キャッチ(InterruptedExceptionある電子){ 
                    e.printStackTrace(); 
                } 
            } 
        } 
    } 

    静的 クラス ThreadBが延びスレッド{ 
        @Overrideが
        同期 公共 ボイドランを(){
             試み{ 
                するSystem.out.println( "BのthreadNameを開始=" +にThread.currentThread()のgetName()+ "" + のSystem.currentTimeMillis ())。
                Thread.sleep( 5000 ); 
                System.out.printlnは(。+にThread.currentThread()のgetName()+ "" + "BのthreadName =終了" のSystem.currentTimeMillisを())。
            } キャッチ(InterruptedExceptionある電子){ 
                e.printStackTrace(); 
            } 
        } 
    } 
}

業績の分析:

 

 

 

 

おすすめ

転載: www.cnblogs.com/lkc9/p/12556443.html