1.4同時スレッドとプロセス

9448 ワード

一、マルチスレッド
1、1スレッドとプロセスの違い
≪プロセス|Process|emdw≫:システム上で実行されているプログラムはすべて1つのプロセスです.各プロセスには1~複数のスレッドが含まれます.
スレッド:スレッドは、プログラム内で独立して実行できる命令のセット、またはプログラムの特殊なセグメントです.
まとめ:プロセスはすべてのスレッドの集合であり、各スレッドはプロセスの実行パスです.マルチスレッドの利点は、プログラムの効率を向上させることです.
1つのアプリケーションシステムは、複数のプロセスを実行できます.プロセスには必ず1つのメインスレッド(JAVAのMain関数)があります.スレッドは、プロセスの実行順序、プロセス、パスであり、各スレッドには影響しません.
1、2生活の実例:
複数のダウンロード、チケット購入システム、アプリケーションシステム、Ajax非同期アップロード.
1、3マルチスレッドを実現する方式
同期実行:単一スレッド(同じ時刻に1つのメソッドしか実行できず、時間加算)
非同期実行:マルチスレッド(同じ時刻に複数のメソッドを同時に実行し、相互に影響せず、最後の実行終了時間に従って時間が終了)
Runnableインタフェースを実装するのはThreadクラスを継承するよりも良いです.インタフェースは多く継承できるからです.
 
スレッドオープンスレッドの実行を開始runメソッドを呼び出すのではなくstartメソッド
作成方法:1、最初の継承Threadクラス書き換えrunメソッド、サンプルコード:スレッドを開くのはrunメソッドを呼び出すのではなくstartメソッドであることに注意
package com.lele.JavaAll1203Test;

/**
* @author LIULE
* @version v0.1
* @classDesc ( Thread run )
*/
class CreateThrea extends Thread{
public void run(){
for( int i = 0;i<=200;i++){
System.out.println("i "+i);
}
}
}
public class Test01Threath {
public static void main(String[]args){
System.out.println(" createThread ");
CreateThrea t = new CreateThrea();
System.out.println(" ");
t.start();
for( int i = 0;i<=200;i++){
System.out.println("MAIN"+i);
}
System.out.println(" createThread ");
}
}

 
2、Runnableインタフェースを実現し、run方法を書き換える.コード例
/**
* @author LIULE
* @version v0.1
* @classDesc ( Runnable
*/
public class Test02Runnable {
public static void main(String[]args){
System.out.println(" ---");
creatRunnable c = new creatRunnable();
System.out.println(" ---");
Thread thread = new Thread(c);
thread.start();
for(int i = 0 ; i <= 200 ;i++ ){
System.out.println("i "+i);
}
System.out.println(" --");
}

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

3、匿名内部クラスの使用
public class Test03InNoname {
public static void main(String[]args){
System.out.println(" ");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for ( int i = 0; i < 20;i++){
System.out.println(" i"+i);
}
}
});
thread.start();
for ( int i = 0; i < 20;i++){
System.out.println(" i"+i);
}
}
}

スレッドでよく使用されるAPIの方法:
start()起動スレッド
CurrentThread()現在のスレッドオブジェクトの取得
getID()現在のスレッドID Thread-番号を取得0から
getName()現在のスレッド名を取得
sleep(long mill)スリープスレッド
Stop()スレッドを停止します(安全ではありません、使用しません)
二、デーモンスレッド
Javaには2つのスレッドがあります.1つはユーザースレッド(非デーモンスレッド、ユーザースレッドとはユーザーがカスタマイズして作成したスレッドを指し、メインスレッドが停止し、ユーザースレッドが停止しません)です.
もう1つは、デーモンスレッド(メインスレッドとともにGC回収スレッドを破棄)です.デーモンスレッドは、プロセスが存在しないか、メインスレッドが停止すると、デーモンスレッドも停止します.
setDaemon(true)メソッドを使用してデーモンスレッドに設定
三、マルチスレッド状態
スレッドは、作成、実行から終了まで常に次の5つのステータスの1つになります.新規ステータス(ew Thread(r))、準備完了ステータス(start()メソッド)、実行ステータス(run()メソッドの実行が本格的に開始)、
ブロック状態スレッドの実行中に、様々な理由でブロック状態に入る可能性があります.
1>スレッドはsleepメソッドを呼び出すことによって睡眠状態に入る.
2>スレッドはI/O上でブロックされた操作を呼び出します.すなわち、入力出力操作が完了するまで呼び出し元に戻らない操作です.
3>スレッドは、他のスレッドによって保持されているロックを取得しようとします.
4>スレッドはトリガ条件を待っています.
死亡状態、isAliveメソッドを使用する必要があります
1)run法は正常に脱退して自然に死亡し,
2)捕獲されていない異常がrun法を終了してスレッドを急死させた.
四、JOIN方法
joinの役割は他のスレッドを待つことです.
t1.join();//他のスレッドを待機にし、現在のt 1スレッドが実行されるまで解放します.
thread.Joinは指定したスレッドを現在のスレッドに加え,交互に実行される2つのスレッドを順次実行されるスレッドに統合することができる.例えばスレッドBにおいてスレッドAのJoin()メソッドが呼び出され、スレッドAの実行が完了するまでスレッドBの実行が継続される.joinメソッドは、対応する次の実行メソッドに書かれます.