Javaマルチスレッドの簡単なまとめ

7434 ワード

1.マルチスレッドのメリットとデメリット
利点1.資源利用率の向上2.ユーザーエクスペリエンスの向上
欠点:1.他のスレッドの実行確率を低減する.ユーザーはソフトウェアのカートン問題を感じる.増加したシステム、資源圧力4.マルチスレッドの場合の共有リソースの問題、スレッド競合、スレッドセキュリティの問題
2.カスタムスレッドクラスを作成する2つの方法
class ThreadクラスJavaのスレッドクラスThreadクラスはRunnableインタフェースの実装クラスであり、多くのスレッドの操作で使用する方法を提供しています.
interface Runnableインタフェースここではwhat will be runを規定していますか?中には一つの方法run方法しかありません
方法一:スレッドクラスをカスタマイズし、Threadクラスを継承し、runメソッドを書き換えてカスタムスレッドオブジェクトを作成し、startメソッドを直接呼び出し、スレッドを開く
方法2:スレッドクラスをカスタマイズし、Runnableインタフェースに従ってカスタムコンプライアンスインタフェースRunnableを使用してクラスオブジェクトを実装し、Thread構築方法パラメータとしてThreadクラスオブジェクトとstartメソッドを利用してスレッドを開く
【推奨】上記2つの方法、推奨使用方法2は、Runnableインタフェースに従ってカスタムスレッドを完了し、通常の継承ロジックに影響を及ぼさず、匿名の内部クラスを使用してスレッドコードブロックの書き込みを完了することができる
コードディスプレイ
方式一
/*
 *       MyThread1  Thread 
 */
class MyThread1 extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("  Thread       ");
		}
	}
}

public class Demo1 {
	public static void main(String[] args) {
		
		//       Thread         
		MyThread1 myThread1 = new MyThread1();
        
		//         ,   run            。
		// myThread1.run();
        
        //     start      
		myThread1.start();
	}
}

方式2
class MyThread2 implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("  Runnable          ");
		}
	}
}

public class Demo1 {
	public static void main(String[] args) {
		
//     Thread   ,    Runnable              
		Thread thread = new Thread(new MyThread2());
		//    Thread   start      
		thread.start();
	}
}

3.Threadクラスの理解すべき方法
構造方法Constructor Thread()新しいスレッドオブジェクト、ターゲットなし、指定された名前なしThread(Runnable target)を割り当てます.新しいスレッドオブジェクトを作成し、スレッドオブジェクトの作成中にRunnableインタフェースの実装クラスオブジェクトを実行スレッドコードブロックターゲットThread(String name)として使用します.ターゲットが指定されていない新しいスレッドを作成しますが、現在のスレッドの名前をThread(Runnable target,String name)と指定します.スレッドのスレッドオブジェクトを作成し、Runnableインタフェースを使用してクラスオブジェクトを実装し、実行ターゲットとしてnameをスレッド名として指定します.
メンバーメソッド:void setName(String name);String getName(); 以上の2つはname属性setterとgetterメソッドvoid setPriority(int Priority)である.スレッドの優先度を設定するのは、必ずしも実行要求ではなく、実行の確率優先度の数値範囲[1-10]10の最大1最低5デフォルトint getPriority()を増加させるだけである.スレッド優先度void start()を取得する.スレッドオブジェクトの起動
public static void sleep(int ms); 現在のメソッドは静的メソッドであり、Threadクラス呼び出しにより、現在存在するスレッドコードブロックに対応するスレッドであることが要求され、スリープ操作を行い、指定されたミリ秒数public static Thread currentThread()をスリープする.現在のメソッドは静的メソッドであり,Threadクラス呼び出しにより現在位置するコードブロックに対応するスレッドオブジェクトを取得する.