簡単なマルチスレッドを実現


一、定義スレッド
 
1、java.lang.Thread類を拡張します。
このような中にrun()の方法があります。使い方に注意してください。
public void run() 
このスレッドが独立したRunnableを使用してオブジェクト構造を実行する場合、Runnableオブジェクトのrun方法を起動する。そうでなければ、この方法は何の操作も実行されずに戻ります。
 
  Threadのサブクラスは、この方法を書き換えるべきである。
 
2、java.lang.Runnableインターフェースを実現する。
void
run()
実装インターフェースRunnableのオブジェクトを使用してスレッドを作成すると、このスレッドが起動され、独立して実行されるスレッド内でオブジェクトを呼び出すrun方法が生じる。
方法runの従来の協定は、任意の必要な動作を実行することができる。
 
二、実効スレッド
1、java.lang.Thread類を広げるスレッドなら、そのままnewでいいです。
2、java.lang.Runnableインターフェースを実現したクラスであれば、Threadの構造方法を使用する。
Thread(Runnable target)
Thread(Runnable target,String name)
Thread(ThreadGroup group,Runnable target)
Thread(ThreadGroup group,Runnable target,String name)
Thread(ThreadGroup group,Runnable target,String name,long stackSize)
 
三、起動スレッド
 
スレッドのThreadオブジェクト上でstart()を呼び出す方法は、run()または他の方法ではありません。
start()メソッドを呼び出す前に、スレッドが新しい状態にあるということは、オブジェクトがThreadされていますが、まだ本物のスレッドがありません。
start()メソッドを呼び出した後に:一連の複雑な事が発生しました。
      新しい実行スレッドを起動します。
      スレッドは新しい状態から運転可能状態に移行します。
      スレッドが実行される機会が得られると、そのターゲットrun()方法が実行される。
 
注意:Javaにとって、run()方法は特別なところがありません。main()メソッドのように、新しいスレッドだけが呼び出しの方法名を知っています。したがって、Runnable上またはThread上でのアップロードはrun方法で合法的である。しかし、新しいスレッドは起動されません。
 
四、例
package thread_test;

/**
 *   Runnable          
 * 
 * @author ciding 
 * @createTime Dec 7, 2011 9:38:52 AM
 *
 */
public class TestRunnable { 
    public static void main(String[] args) { 
    	StrRunnable sr1 = new StrRunnable("chenfengbin");
    	StrRunnable sr2 = new StrRunnable("cidng");

        Thread t1 = new Thread(sr1);
        Thread t2 = new Thread(sr2);

        t1.start(); 
        t2.start(); 
        
        StrThread st1 = new StrThread("chenfengbin");
        StrThread st2 = new StrThread("cidng");

        Thread t3 = new Thread(st1);
        Thread t4 = new Thread(st2);

        t3.start(); 
        t4.start(); 
    }
}

/**
 *           
 * 
 * @author ciding 
 * @createTime Dec 8, 2011 10:20:28 PM
 *
 */
class StrRunnable  implements Runnable { 
    private String name; 

    public StrRunnable(String name) { 
        this.name = name; 
    } 

    public void run() { 
        for (int i = 0; i < 3; i++) { 
        	for(long j=0;j<100000000;j++);	//             ,         。
            System.out.println("Runnable  " + name + ": " + i);
        } 
    } 
}

/**
 *          
 * 
 * @author ciding 
 * @createTime Dec 8, 2011 10:20:50 PM
 *
 */
class StrThread extends Thread{
	private String name;
	
	public StrThread(String name){
		this.name = name;
	}
	
	public void run() { 
        for (int i = 0; i < 3; i++) { 
        	for(long j=0;j<100000000;j++);	//             ,         。
            System.out.println("Thread  " + name + ": " + i);
        } 
    }
}
 
実行結果:
Runnable  chenfengbin: 0
Runnable  cidng: 0
Thread  chenfengbin: 0
Thread  cidng: 0
Runnable  chenfengbin: 1
Runnable  cidng: 1
Thread  chenfengbin: 1
Thread  cidng: 1
Runnable  chenfengbin: 2
Thread  chenfengbin: 2
Runnable  cidng: 2
Thread  cidng: 2
 
 
問題を考える:
       1,run()を直接呼び出す方法は、一般のプログラムとは違いますか?新しいスレッドが起動しますか?新しいスレッドを起動するとどうやって作られますか?
       2スレッドに名前がありますか?
       3スレッドはどのようにスケジュールされていますか?スレッドスケジュールに影響していませんか?
       4,スレッドはどのような運行状態ですか?
       5スレッドにはどのような一般的な方法がありますか?
はい、これらの問題は後の段階で一つ一つ答えます。
Javaスレッドとスレッド池のテーマ:
http://ciding.iteye.com/admin/blogs/1300110