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インタフェースに従ってカスタムスレッドを完了し、通常の継承ロジックに影響を及ぼさず、匿名の内部クラスを使用してスレッドコードブロックの書き込みを完了することができる
コードディスプレイ
方式一
方式2
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クラス呼び出しにより現在位置するコードブロックに対応するスレッドオブジェクトを取得する.
利点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クラス呼び出しにより現在位置するコードブロックに対応するスレッドオブジェクトを取得する.