簡単なマルチスレッドを実現
一、定義スレッド
1、java.lang.Thread類を拡張します。
このような中にrun()の方法があります。使い方に注意してください。
public void run()
このスレッドが独立した
2、java.lang.Runnableインターフェースを実現する。
void
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方法で合法的である。しかし、新しいスレッドは起動されません。
四、例
実行結果:
問題を考える:
1,run()を直接呼び出す方法は、一般のプログラムとは違いますか?新しいスレッドが起動しますか?新しいスレッドを起動するとどうやって作られますか?
2スレッドに名前がありますか?
3スレッドはどのようにスケジュールされていますか?スレッドスケジュールに影響していませんか?
4,スレッドはどのような運行状態ですか?
5スレッドにはどのような一般的な方法がありますか?
はい、これらの問題は後の段階で一つ一つ答えます。
Javaスレッドとスレッド池のテーマ:
http://ciding.iteye.com/admin/blogs/1300110
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