Javaのマルチスレッドの基本的な方法
スレッド睡眠睡眠()
私たちはあなたの睡眠は、静的メソッドであることがわかります、スリープ状態にスレッドを設定する方法を眠ることができます。
公共の静的なネイティブのボイド睡眠は(長いVAR0)例外:InterruptedExceptionがスローされます。
{試します
System.out.println(新しいDate()getSeconds());
Thread.sleep(5000);
System.out.println(新しいDate()getSeconds());
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
setdaemonデーモンスレッド
停止への非デーモンスレッド、その後、自動的にデーモンスレッドを終了
パブリック静的無効メイン(文字列[] args){
新しいスレッドをスレッド1 =スレッド(){
@オーバーライド
ます。public void実行(){
super.run();
以下のために(INT iは= 0; I <5; I ++){
System.out.println(「非デーモンスレッド」);
}
}
}。
新しいスレッドをスレッド2 =スレッド(){
@オーバーライド
ます。public void実行(){
{(I ++; I <200 iが0 = INT)のために
System.out.println( "デーモンスレッド");
}
}
}。
thread2.setDaemon(真の);
thread1.start();
thread2.start();
}
デーモンスレッドとしてスレッドを自動的に停止され、後にスレッドが終了したときので、唯一の5つの出力を停止するスレッド2プログラムは、実際には出力200回、これはあるはずです。
マルチスレッドは、参加します
あなたが停止する方法、そして、現在のスレッドに参加を行う場合は、参加()のスレッドを起動して実行します。実行するためにキューをジャンプに相当。最初の実行キューをジャンプするスレッド1ましょう私== 20、場合、スレッド2スレッドの実装では、次の。
パブリック静的無効メイン(文字列[] args){
最終スレッドスレッド1 =新しいスレッド(){
@オーバーライド
ます。public void実行(){
super.run();
{(I ++; I <500 iが0 = INT)のために
System.out.println( "スレッド1 ---" + I)。
}
}
}。
新しいスレッドをスレッド2 =スレッド(){
@オーバーライド
ます。public void実行(){
{(I ++; I <200 iが0 = INT)のために
IF(iは20 ==){
{試します
//実行はキューをジャンプします
thread1.join();
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
System.out.println(I);
}
}
}。
thread1.start();
thread2.start();
}
()メソッドは、MSが長い(MS)に参加パラメータを渡すことができる参加
のは、時間をかけて、2つのスレッドが交互に実行し、キューをジャンプする、実行XXXミリ秒を実行スレッドを表して参加してみましょう
パブリック静的無効メイン(文字列[] args){
最終スレッドスレッド1 =新しいスレッド(){
@オーバーライド
ます。public void実行(){
super.run();
{(I ++; I <500 iが0 = INT)のために
System.out.println( "スレッド1 ---" + I)。
}
}
}。
新しいスレッドをスレッド2 =スレッド(){
@オーバーライド
ます。public void実行(){
{(I ++; I <200 iが0 = INT)のために
IF(iは20 ==){
{試します
キューをジャンプする// 1ミリ秒の実行
(1)thread1.join。
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
System.out.println(I);
}
}
}。
thread1.start();
thread2.start();
}
Yeild礼譲のスレッド
ので、他のスレッドという、CPUを作るyeild
パブリック静的無効メイン(文字列[] args){
最終スレッドスレッド1 =新しいスレッド(){
@オーバーライド
ます。public void実行(){
super.run();
{(I ++; I <500 iが0 = INT)のために
System.out.println(のgetName()+ "---" + I)。
}
}
}。
新しいスレッドをスレッド2 =スレッド(){
@オーバーライド
ます。public void実行(){
{(I ++; I <200 iが0 = INT)のために
IF(I%5 == 0){
Thread.yield();
}
System.out.println(のgetName()+ "---" + I)。
}
}
}。
thread1.start();
thread2.start();
}
セットのスレッドの優先順位にのsetpriority
デフォルトの優先度は5、最小1、最大10、より大きな、より高い優先度であります
パブリック静的無効メイン(文字列[] args){
最終スレッドスレッド1 =新しいスレッド(){
@オーバーライド
ます。public void実行(){
super.run();
{(I ++; I <500 iが0 = INT)のために
System.out.println(のgetName()+ "---" + I)。
}
}
}。
新しいスレッドをスレッド2 =スレッド(){
@オーバーライド
ます。public void実行(){
{(I ++; I <500 iが0 = INT)のために
System.out.println(のgetName()+ "---" + I)。
}
}
}。
// 10に最大のスレッドの優先度を設定します
thread1.setPriority(Thread.MIN_PRIORITY)。
//最小スレッド優先順位、最小1セット
thread2.setPriority(Thread.MAX_PRIORITY)。
thread1.start();
thread2.start();
}
シンクブロックは、同期
場合、マルチスレッド、マルチセグメント・コードを同時にときに実行されます。私たちは、CPUがスレッドを切り替えないで、コードの実装に願っています
同期方法
同期方法は、上のメソッドロックを指し、
静的オブジェクトの同期方法は、クラスバイトコードのオブジェクトであります
同期ロックオブジェクトの非静的メソッドはこれです
パブリッククラスThreadSynchroniedMethod {
パブリック静的無効メイン(文字列[] args){
最終的な決定権と言う=新セイ();
新しいスレッドをスレッド1 =スレッド(){
@オーバーライド
ます。public void実行(){
以下のために(INT I 0 =; I <10000; I ++){
say.say();
}
}
}。
新しいスレッドをスレッド2 =スレッド(){
@オーバーライド
ます。public void実行(){
以下のために(INT I 0 =; I <10000; I ++){
say.say1();
}
}
}。
// 10に最大のスレッドの優先度を設定します
thread1.setPriority(Thread.MIN_PRIORITY)。
//最小スレッド優先順位、最小1セット
thread2.setPriority(Thread.MAX_PRIORITY)。
thread1.start();
thread2.start();
}
}
クラスセイ{
//メソッドのロック
静的同期無効言います(){
System.out.print( "S");
System.out.print( "A");
System.out.print( "Y");
System.out.print( "H")。
System.out.print( "E");
System.out.print( "L")。
System.out.print( "L")。
System.out.println( "O")。
}
静的ボイドsay1(){
同期(Say.class){
System.out.print( "1")。
System.out.print( "2")。
System.out.print( "3")。
System.out.print( "4")。
System.out.print( "5");
System.out.print( "6")。
System.out.print( "7")。
System.out.println( "8");
}
}
}
同じリソースのロックを使用して複数のスレッドが簡単にデッドロックにつながります
デッドロックが原因リソースやAブロッキング現象の競争に、実装プロセス内の2つの以上のプロセスを指す外力なしに、彼らはそれを促進することができなくなり、互いに通信引き起こしました。この時点で、システムがデッドロック状態やデッドロックと呼ばれる別のプロセスを待っているの過程で常にデッドロックを生成するためのシステムであると言います。
スレッドセーフなクラス
ベクター
StringBufferの
ハッシュ表
スレッドセーフ
配列リスト
StringBuilder
HashSetの
そこjava.util.Collections synchronizedListや他の方法、私たちは、スレッドの危険なセットはスレッドセーフながら、学習になって、私たちは何度もそれを開始することは違法であることを知っているサポート