暴力の道のスレッドの終了

思考

1.クラスの実行スレッドを作成することにより、

実行スレッドの子スレッドを実行する実行時間()メソッド2.書き換えのスレッドとして新しいスレッドを作成します。

3.子スレッド.setDaemon(真)は、デーモンスレッドとしてサブスレッドを設定し、必ず子スレッドを作る実行のスレッドの終了時に最後に来て

4.通常の状況を確認するために、スレッドの子スレッド.join()を実行した後、ビジネス・ロジックのスレッドの実行が死を前に完了した噴火

5.子スレッド.join()が実行.inrerrupt(のスレッドである)は、サブスレッドの終了に伴って、実行の終了スレッドを中断するとき

ビジネスコードセクション

パッケージcom.dwz.concurrency.chapter6。

パブリック クラスThreadService {
     プライベートスレッドexecuteThread。
    
    プライベート ブール完成= ;
    
    公共 ボイドが{(Runnableをタスク)を実行します
        executeThread = 新しいスレッド(){
            @オーバーライド
            公共 のボイドの実行(){
                スレッドランナーは = 新しいスレッド(タスク)。
                runner.setDaemon(真の);
                runner.start();
                してみてください{
                    runner.join();
                    完成 = ;
                } キャッチ(InterruptedExceptionある電子){
                    e.printStackTrace();
                }
            }
        }。
        executeThread.start();
    }
    
    公共 ボイドシャットダウン(長いミル){
         長い CURRENTTIME = にSystem.currentTimeMillis();
        しばらく(!{完成)
             長い shutdownRunnedTime =にSystem.currentTimeMillis() - CURRENTTIME。
            もし(shutdownRunnedTime> ミル){
                System.out.println(「タスクタイムアウト、それを終了する必要があります」);
                executeThread.interrupt();
                休憩;
            }
            
            してみてください{
                executeThread.sleep( 1 )。
            } キャッチ(InterruptedExceptionある電子){
                System.err.println( "実行スレッドが中断" );
                 BREAK ;
            }
        }
        完成 = ;
    }
}

テストコードセクション

パッケージcom.dwz.concurrency.chapter6。

パブリック クラスThreadCloseForce {
     公共 静的 ボイドメイン(文字列[]引数){
         長い開始= にSystem.currentTimeMillis();
        ThreadService TS = 新しいThreadService();
        ts.executeは(() - > {
             //は非常に重いリソースをロードし
            ながら、){
                
            }
        });
        ts.shutdown( 10000 );
        長い端= にSystem.currentTimeMillis();
        System.out.println( "実際の走行時間:" +(エンド- スタート));
    }
}

 

おすすめ

転載: www.cnblogs.com/zheaven/p/12054044.html