JAvaマルチスレッドプロファイリング
2387 ワード
Java開発者にとって、マルチスレッドは応用に熟練しなければならない知識点であり、特にJava言語に基づく製品を開発しなければならない.Javaマルチスレッドの知識点について簡単に説明します.
スレッドを説明する前に、プロセスとスレッドという混同しやすい2つの概念についてお話しします.
プロセス:
プロセスとは、メモリで実行されるアプリケーション(たとえば、実行されるexeがプロセス)を指します.
スレッド:
スレッドとは、複数のスレッドを実行できるプロセスの実行プロセスです.
スレッドの実行を分析します.
1、スレッドの作成と起動
スレッドの作成:2つの方法があります
1)java.lang.Threadクラスを継承し、スレッドを直接newでインスタンス化します.
2)java.lang.Runnableインタフェースを実装し,スレッドをThreadの構築手法でインスタンス化する.
スレッドの開始
Threadのstart()メソッドを呼び出します.
例1-1:Threadクラスを継承するマルチスレッドの例
例1-2:Runnableインタフェースを実装するマルチスレッドの例
2、スレッドの状態変換
3、スレッドのスケジューリング
スレッドのスケジューリングには、スリープ(sleep)、優先度(setPriority)、譲歩(yield)、合併(join)があります.
スレッドの異なるスケジューリングは、異なるステータスに変換します(2のステータス変換テーブルを参照できます).
4、スレッドの同期とロック
オブジェクトにはロックが1つしかありません.したがって、1つのスレッドがロックを取得すると、最初のスレッドがロックを解放(または戻る)まで他のスレッドはロックを取得できません.これは、ロックが解放されるまで、他のスレッドがオブジェクト上のsynchronizedメソッドまたはコードブロックに入ることができないことを意味します.
マルチスレッド記事の推奨事項:http://lavasoft.blog.51cto.com/62575/222742
スレッドを説明する前に、プロセスとスレッドという混同しやすい2つの概念についてお話しします.
プロセス:
プロセスとは、メモリで実行されるアプリケーション(たとえば、実行されるexeがプロセス)を指します.
スレッド:
スレッドとは、複数のスレッドを実行できるプロセスの実行プロセスです.
スレッドの実行を分析します.
1、スレッドの作成と起動
スレッドの作成:2つの方法があります
1)java.lang.Threadクラスを継承し、スレッドを直接newでインスタンス化します.
2)java.lang.Runnableインタフェースを実装し,スレッドをThreadの構築手法でインスタンス化する.
スレッドの開始
Threadのstart()メソッドを呼び出します.
例1-1:Threadクラスを継承するマルチスレッドの例
public class TestThread extends Thread{
public TestThread(String name) {
super(name);
}
public void run() {
for(int i = 0;i<5;i++){
for(long k= 0; k <100000000;k++);
System.out.println(this.getName()+" :"+i);
}
}
public static void main(String[] args) {
Thread t1 = new TestThread(" ");
Thread t2 = new TestThread(" ");
t1.start();
t2.start();
}
}
例1-2:Runnableインタフェースを実装するマルチスレッドの例
public class MyThread implements Runnable {
private String name;
public MyThread (String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 5; i++) {
for (long k = 0; k < 100000000; k++) ;
System.out.println(name + ": " + i);
}
}
}
public class TestRunnable {
public static void main(String[] args) {
MyThread mt1 = new MyThread (" ");
MyThread mt2 = new MyThread (" ");
Thread t1 = new Thread(mt1);
Thread t2 = new Thread(mt2);
t1.start();
t2.start();
}
}
2、スレッドの状態変換
3、スレッドのスケジューリング
スレッドのスケジューリングには、スリープ(sleep)、優先度(setPriority)、譲歩(yield)、合併(join)があります.
スレッドの異なるスケジューリングは、異なるステータスに変換します(2のステータス変換テーブルを参照できます).
4、スレッドの同期とロック
オブジェクトにはロックが1つしかありません.したがって、1つのスレッドがロックを取得すると、最初のスレッドがロックを解放(または戻る)まで他のスレッドはロックを取得できません.これは、ロックが解放されるまで、他のスレッドがオブジェクト上のsynchronizedメソッドまたはコードブロックに入ることができないことを意味します.
マルチスレッド記事の推奨事項:http://lavasoft.blog.51cto.com/62575/222742