Javaのマルチスレッド詳細のインタビューの質問


詳細をマルチスレッド:

?睡眠法と待ち方法の相違点と類似点は何ですか:顔の質問1.

同じポイント:あなたは凍結状態でスレッドを作ることができる

の相違点:

1.
スリープ時間を指定する必要があります
待機時間は、あなたが時間を指定することはできません、指定することができます。

2.

睡眠時間に一時的にブロックしたり、実行中のスレッド。

待ち時間は時間が指定されていない場合、それは通じ通知しなければならないか、またはウェイクのnotifyAll。

3.

SLEEPは必ずしも同期して定義されていません。

待ち時間が同期して定義する必要があります。(ロック)

4が

で定義されています同期、

睡眠へのスレッドの実行は、ロックを解除しません。(睡眠は確かに起きてすることができますので)

実行スレッドが待機し、ロックが解除される。(待機は目を覚ますことができなくなります)

5.

メソッド名が同じではありません


// ***複数のスレッドがあるこの時点で同期ブロックは、スレッドの安全性の問題は生じません。

*** //それが実行スレッドの右の光を持っているので、することは十分ではありません、我々はロックが必要になります。

同期(OBJ)
{
// SLEEP(5000); // *** 5000ミリ秒、すなわち5秒// *。 **執行力の解除、

待機();. // *** // ***目覚めたら、一時的にブロックされた状態になります0 1 2 3つのスレッドプールのスレッド。

コード...

}

同期(OBJ){


notifyAll(); // *** 3 // *** 。ロック保持している

コードを...


*** //同期目的の暗黙のコードブロックのロックを解除し、最後にロック同期コードブロックを解放します。
}

 

 

それを停止する方法2.スレッド?

時代遅れの方法を停止し、その説明は、他のソリューションがあることがわかっ見るために。

最後スレッド:スレッド化タスクは、コード実行、runメソッドの最後を作ることです。

 

?それが終わる齧るメソッドを実行する

runメソッドは、通常のサイクルを定義している(サイクルを定義されていない場合は、何の意味がない、開いていない複数のスレッドを実行します。)、限りああへの制御ループとして。





***注:スレッドがタスクである場合には凍結状態は、それが決定マークが?!ない行くことができる

?***の方法により、チェックアウトの停止は、あなたが割り込みメソッドを使用する必要があり、長い時間のためにターゲットスレッドが待機する場合は、解決策を提供することが見出された、説明:我々は仮定します待機割り込みへ。


いわゆるブレークがスレッドを停止しません。

***割り込み機能は、状態にそのスレッドのバックは、(スレッドが再びCPUを実行する資格を持ってみましょう)ので、スレッドの凍結状態をクリアすることです。

***割り込みので、凍結からスレッド状態回復バック。その割り込みステータスをクリアしてください。



***それは必須であるので、その例外が発生するがあるでしょう、あなたは例外処理に***、キャッチで例外をキャッチすることができ、変更マークするように、サイクルの終わりには、実行方法は終了してみましょう。

 

 

3.デーモンスレッド:バックグラウンドスレッドは、一般的にフォアグラウンドスレッドを作成しています。

同じランタイムフォアグラウンドのバックグラウンドスレッドで、CPUの実行権の実行を取得します。

多少異なるだけ終わり。

フォアグラウンドスレッドは方法、スレッドの最後の最後まで実行します。

バックグラウンドスレッドはまた、別のケースがあり、この方法が終了すると、スレッドの終了を実行することができます

このプロセスは、すべてのフォアグラウンドスレッドがすべての上に、その後、どんなに状態でバックグラウンドスレッドの種類、それは、処理を終了終了しますとき。

プロセスの終了は、フォアグラウンドスレッドに依存しています。


これは、デーモンスレッドと呼ばれる理由は、フォアグラウンドスレッドを守っにおけるバックグラウンドスレッド以外の何ものでもありません。

彼らは自動的に終了したバックグラウンドスレッドと一緒に、フォアグラウンドスレッドを終了しました。


4. Aのスレッドの優先順位:デジタルID:1-10

どこデフォルトの初期優先度は5です。最も重要な3つの重点1、5、10

setPriorityを(10); // ***は、スレッドの優先順位を設定します。

setPriorityを(Thread.MAX_PRIORITY)。

setPriorityを(Thread.MIN_PRIORITY)。

setPriorityを(Thread.NORM_PRIORITY)。


5.スレッドグループ:スレッドグループ:明確なスレッドグループオブジェクトは、スレッドのコンストラクタによって新しいスレッドに属します。

メリットスレッドグループ:同じグループのことができます複数のスレッド、統一された操作。

メインスレッドグループに属するデフォルト。


6.スレッドは、独自の名前を取ることができます。

例えば:

スレッドT1 =新しいスレッド(D、 " カイ"); // ***カイスレッド名

スレッドT2 =新しいスレッド(D、 " 小さな強い"); // ***少し強いスレッド名

スレッドにあなたは、プログラムの可読性を高めるために名前を所有することができます。

例えば:

スレッドを入力し、実行中のスレッドなど


7.メソッドに参加します

メインスレッドは凍結状態でメインスレッドの実行、実行して資格を解放し、実行に参加するt1の知っている、ここで実行するために、ときにそれを再開するには?

t1等のスレッド実行。
試す{t1.join();}キャッチ (InterruptedExceptionある電子){}


{t1.joinを();}しようとキャッチ(例外:InterruptedException e)は{} // ***通常、この方法は、一時的に使用されているスレッドの動作に参加するので、スレッドの操作が終了したことを、プログラムが実行を継続します。

 


8.収率();(静的静的)

// ***現在実行中のスレッドオブジェクトを一時停止し、他のスレッドを実行します。

Thread.yield(); // ***スレッド一時的に中断。エグゼクティブパワーは、他のスレッドが執行力へのアクセス権を持っているので、こと、解放されます。

 


// ***ネストされたクラスは内部クラスです。

 

9.開発、スレッド匿名の内部クラス式。

// ***顔質問

新しいスレッド(新しいRunnableを()// ***が入力されているが、スレッドのタスクオブジェクトを渡す。実行すると、タスクはこの目的に応じて実行されます。
{
公共のボイドRUN(){
}


})を起動()。

 

 

// ***顔質問

新しいスレッド(新しいRunnableを()// ***が入力されているが、スレッドのタスクオブジェクトを渡す。実行すると、タスクはこの目的に応じて実行されます。
{
公共のボイドRUN(){

System.out.println( "RunnableをRUN");
}


}){

公共ボイドRUN(){


System.out.printlnは( "RUNのサブスレッド");
}

} .start();

}

 

  1  パブリック クラスThreadTest {
   2      
  。3      公共 静的 ボイドメイン(文字列[]引数){
   。4          
  。5      / * 
  6      //スレッドを作成***使用匿名の内部クラス。    
  7          新しい新しいThread(){// ***これは、runメソッドの動作をカバーすることができ、スレッドオブジェクトのサブクラスです。
  8              
  。9              公共ボイドRUN(){
 10                  
。11                  (INT X = 0; X <40、X ++)のために{
 12である                     。のSystem.out.println(にThread.currentThread()のgetName()+「X -.... ... 。「+ X);
 13れる                 }
 14          }
 15          
16  } .start();
 17         
18          
19      のRunnable R =新しいRunnableを(){
 20          
21          公共ボイドラン(){
 22              
23              (INT X = 0; X <40であり、x ++)のために{
 24                  。のSystem.out.println(にThread.currentThread()のgetName() + ".... Y ...." + X)。
25              }
 26              
27          }
 28          
29      }。
30      
31      新しいスレッド(R).start();
32  
33  
34          
35          {(; X <40×++整数X = 0)のための
 36              のSystem.out.println(にThread.currentThread()のgetName()+ "... Z ..." + X)。
37          }
 38         
39          * / 
40          
41れる         // ***質問は、表面
42が         
43である         新新(スレッド新しい新しい Runnableを()// ***スレッドが入力され、タスクオブジェクトは、タスクがオブジェクトで実行され、実行時に渡されました。
44は         {
 45              公共 ボイドRUN(){    
 46である                 
47                  のSystem.out.println( "RunnableをRUN" );
 48              }
 49              
50              
51である         } {)
 52が             
53である             公共 ボイドRUN(){
 54が                 
55                  
56である                  のSystem.out.println(「サブスレッドRUN「);    //***実行
57である             }
 58              
59          );} .start(   // 、新しい新しいスレッドは、バックブレースあるサブクラスである。
60          
61      }
 62  // ***実行操作サブクラス、親クラスをオーバーライドサブクラスのメソッド
63は、 
64  }
 65  
66  
67  
68  / * 
69個の 
70  クラス{スレッド
 71は     
72      専用のRunnable R&LT;
 73である     スレッド(RunnableをR&LT)
 74      {
 75          
76          this.r = R&LT;
 77          
78      }
 79      
80      公共ボイドRUN() {
 81         
82          
83          IF(= R&LTヌル!){
 84              
85              
86              r.run(); // *** runメソッドのRunnableここで呼ばれる
 87              
88          }
 89          
90      }
 91である     
92      公共ボイド開始(){
 93          
94          ラン();
 95          
96          
97      }
 98      
99  }
 100  
101  クラスのサブスレッド{// ***サブクラスカバー親、ランタイム動作の方法のサブクラスであるスレッドを拡張。
 102      
103      公共ボイド実行(){
 104          
105          
106          システム.out.pritnln( "RUNのサブスレッド");
 107      }
108      
109      
110  }
 111  
112  
113  のRunnable RunnableをR&LT新しい新=();
 114  {
 115      
1 16          公共ボイドRUN(){
 117              
1 18              
119              のSystem.out.println( "RunnableをRUN");
 120              
121          }
 122      
123  }
 124  //スレッドスレッド新しい新しい= T(r)は、
 125  
126  、サブスレッドは、新しい新しい= T(r)はサブスレッド
 127  
128  t.start();
 129  
130  
131である 。// ***この開始メソッドが最初に呼び出され、その後、実行メソッドを呼び出し、次に、rが決定されません、空の(パラメータでパスはR&LT Runnableオブジェクトであるため)、その後のRunnableのrunメソッドを呼び出し、次に実行可能なランを出力します。
132  
133  
134  * /

 

 




 

 

 

 

 




おすすめ

転載: www.cnblogs.com/CYjiang/p/11805236.html