1.セットのスレッドがバックグラウンドスレッドで
終了が非バックグラウンドスレッドを殺すかどうかに関係なく、ノート、メインスレッドが終了し、メインスレッド以外のバックグラウンドスレッド、バックグラウンドスレッド
1 / ** 2 *后台线程 3 * / 4 パブリック クラス SimpleDaemons 実装Runnableを{ 5 公共 ボイドラン(){ 6 試み{ 7 一方(真){ 8 TimeUnit.MILLISECONDS.sleep(100 )。 9 プリント(にThread.currentThread()+ "" + 本)。 10 } 11 } キャッチ(InterruptedExceptionある電子){ 12 プリント( "スリープ()中断" )。 13 } 14 } 15 公共 静的 ボイドメイン(文字列[]引数)スロー例外{ 16の ための(INT I = 0、I <10; I ++ ){ 17 スレッド・デーモン= 新しいスレッド(新しいSimpleDaemons())。 18 // 设置为后台线程 19 daemon.setDaemon(真)。// )(開始前に呼び出す必要があります 20 )(daemon.startを。 21 } 22 プリント(「すべてのデーモンが開始」)。 23 TimeUnit.MILLISECONDS.sleep(1750 )。 24 } 25 }
図2に示すように、バックグラウンドスレッドのプロパティ
スレッドがバックグラウンドスレッドである場合は、それによって作成されたスレッドは自動的にバックグラウンドスレッドに設定されます。
1 / * 2 つのスレッドが、それによって作成されたスレッドは、自動的にバックグラウンドスレッドに設定されている場合*バックグラウンドスレッド 3 * / 4 クラスデーモン実装のRunnable { 5。 専用スレッド[] T = 新しい新しいスレッド[10 ]。 6 公共 ボイドRUN(){ 7 用(INT ; I <t.length; I = 0 I ++ ){ 8 // 由来の子スレッドT [i]のデフォルトバックグラウンドスレッドである 9 T [I] = 新しい新しいスレッド(新しい新しいDaemonSpawn()); 10 T [I] .start(); 11 printnb( "DaemonSpawn" + I + "を開始、" ); 12 } 13 のために(INT I = 0、I <t.length; I ++ ) 14 printnb( "T [" + I + "] .isDaemon()=" + T [i]の.isDaemon()+ "" ); 15 一方(真) 16 Thread.yield()。 17 } 18 } 19 20 クラス DaemonSpawn 実装Runnableを{ 21 公共 ボイドラン(){ 22 ながら(真) 23 thread.yield(); 24 } 25 } 26は、 27 パブリック クラスデーモンザネットワーク{ 28 公共 静的 ボイドメイン(文字列[]引数)をスロー例外{ 29 スレッドD = 新しい新しいスレッド(新しい新しいデーモン()); 30 // スレッドが配置さdと子スレッドに由来するバックグラウンドスレッドとして(()新しいデーモンを作成し)、デフォルトバックグラウンドスレッドである 31である d.setDaemon(真の); 32 d.start(); 33れる (「d.isDaemon()= printnb "d.isDaemon +()+"、 " ); 34である //デーモンスレッドを許可する 35 // 彼らの起動プロセスを終了: 36 TimeUnit.SECONDS.sleep(1 ); 37 } 38 }
B。バックグラウンドスレッドでは、ケースの句は、そのrun()メソッド終了する最後に実行されない
他の言葉では、それがバックグラウンドスレッドである場合、最終的に節が必ずしも行われない、最終的に節が実行されなくてもよい終わっ
1 / ** 2 *バックグラウンドスレッドfinally節は、非バックグラウンドスレッドを終了するの決定を実行することはできません 3 * / 4 クラス ADaemonを実装したRunnable { 5 公共 無効RUN(){ 6 試し{ 7 印刷(「開始ADaemon " ); 。8 TimeUnit.SECONDS.sleep(1。); 9 } キャッチ(InterruptedExceptionあるE){ 10 印刷("経由の終了InterruptedExceptionある" ); 11 } 最後に{ 12が 印刷(" RUNこれ万一、必ず「?); 13である } 14 } 15 } 16 。17 公共 クラスDaemonsDontRunFinally { 18は パブリック 静的 ボイドメイン(文字列[]引数)スロー例外{ 19。 スレッドT = 新しい新しいスレッド(新しい新しい)ADaemonを(); 20である t.setDaemon(真の); 21です t.start(); 22です // 遅延されない場合は、おそらく( "スタートADaemon")印刷を実行することはありません。 23は、 (1 TimeUnit.SECONDS.sleep ); 24 } 25 }