0から10.Javaマルチスレッド

3580 ワード

第1節:マルチスレッドの導入
定義:同時に複数のタスクを制御します.
public class Demo1 {

	/**
	 *  
	 */
	private static void music(){
		for(int i=0;i<1000;i++){
			System.out.println(" ");
		}
	}
	
	/**
	 *  
	 */
	private static void eat(){
		for(int i=0;i<1000;i++){
			System.out.println(" ");
		}
	}
	
	public static void main(String[] args) {
		/*music();
		eat();*/
		
		/**
		 *  
		 */
		Music musicThread=new Music();
		Eat eatThread=new Eat();
		musicThread.start();
		eatThread.start();
	}
}
public class Eat extends Thread{

	@Override
	public void run() {
		for(int i=0;i<1000;i++){
			try {
				Thread.sleep(100);
				System.out.println(" ");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
public class Music extends Thread{

	@Override
	public void run() {
		for(int i=0;i<1000;i++){
			try {
				Thread.sleep(100);
				System.out.println(" ");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

第二節:Javaマルチスレッド実装
1,Threadクラスを継承する
public class Thread1 extends Thread{

	private int baoZi=1;
	
	private String threadName;

	public Thread1(String threadName) {
		super();
		this.threadName = threadName;
	}

	@Override
	public void run() {
		while(baoZi<=10){
			System.out.println(threadName+"  "+baoZi+" ");
			baoZi++;
		}
	}
	
	public static void main(String[] args) {
		System.out.println(" , , 10 ");
		Thread1 t1=new Thread1(" ");
		Thread1 t2=new Thread1(" ");
		t1.start();
		t2.start();
	}
	
	
}

2,Runnableインタフェースを実現する
public class Thread2 implements Runnable{

	private int baoZi=1;
	
	private String threadName;

	public Thread2(String threadName) {
		super();
		this.threadName = threadName;
	}

	@Override
	public synchronized void run() {
		while(baoZi<=10){
			System.out.println(threadName+"  "+baoZi+" ");
			baoZi++;
		}
	}
	
	public static void main(String[] args) {
		/*System.out.println(" , , 10 ");
		Thread2 t1=new Thread2(" ");
		Thread2 t2=new Thread2(" ");
		Thread t11=new Thread(t1);
		Thread t12=new Thread(t2);
		t11.start();
		t12.start();*/
		
		Thread2 t1=new Thread2(" ");
		Thread t11=new Thread(t1);
		Thread t12=new Thread(t1);
		Thread t13=new Thread(t1);
		//  
		t11.start();
		t12.start();
		t13.start();
		
	}

}

セクション3:スレッドのステータス
1、ステータスの作成
プログラムで構築方法でスレッドオブジェクトを作成すると、新しいスレッドオブジェクトが新規状態になります.この場合、対応するメモリ領域とその他のリソースがありますが、まだ実行できません.スレッドオブジェクトを新規作成するには、「Thread thread=new Thread();」など、Threadクラスの構築方法を使用します.
2、準備状態
スレッドオブジェクトを新規作成したら、そのスレッドのstart()メソッドを呼び出すとスレッドを起動できます.スレッドが起動すると、スレッドは準備完了状態になります.このとき、スレッドはスレッドキューに入り、CPUサービスを待機します.これは、実行条件が満たされていることを示します.
3、運転状態
準備状態のスレッドが呼び出され、プロセッサリソースが取得されると、スレッドは実行状態に入ります.このとき、スレッドオブジェクトのrun()メソッドが自動的に呼び出されます.run()メソッドは,このスレッドの動作と機能を定義する.
4、渋滞状態
実行中のスレッドは、特定の場合、人によって保留されたり、時間のかかる入出力操作を実行する必要がある場合、CPUを譲り、自分の実行を一時的に中止し、渋滞状態に入る.詰まった場合、スレッドはキューキューに入ることができず、詰まった原因が解消された場合にのみ、スレッドは準備完了状態に移行できます.
5、死亡状態
スレッドがstop()メソッドを呼び出すとrun()メソッドの実行が終了すると、死亡状態になります.デッドステートのスレッドは、実行を継続する能力を持っていません.
セクション4:スレッドの一般的な方法
1,getName(); スレッドの名前を返します.
2,currentThread();現在実行中のスレッドオブジェクトへの参照を返します.
3,isAlive();スレッドがアクティブかどうかをテストします.
4,sleep();スレッドがスリープしています.
5,setPriority(int newPriority);スレッドの優先度を変更します.
6,yield();現在実行中のスレッドオブジェクトを一時停止し、他のスレッドを実行します.