スレッドのジョインメソッド

2455 ワード

もっと読む
以下の内容は転載します.http://blog.csdn.net/wistronits/article/details/556035を選択します.
run()とstart()はみんながよく知っている二つの方法です.並列処理したいコードを全部run()に入れます.スター()は自動的にルン()を呼び出すために用いられ、これはJAVAの内在するメカニズムによって規定されている.また、run()のアクセス制御は、publicでなければなりません.戻り値は、voidでなければなりません.余談はさておき、私たちが話したいのはジョンです.まず例を見てみます.
コード:
/**
* @author QingHe
* Creation on 2005-12-19
*/

public class ThreadTest implements Runnable {
public static int a = 0;

public void run() {
for (int k = 0; k < 5; k++) {
a = a + 1;
}
}

public static void main(String[] args) throws Exception {
Runnable r = new ThreadTest();
Thread t = new Thread(r);
t.start();
System.out.println(a);
}
}
すみません、プログラムの出力結果は5ですか?可能性があります.実はあなたが出力5に遭遇するのは難しいです.普通は5ではないです.もちろんこれも機械と深刻な関係があります.なぜですか?私の説明はメインスレッドのmainメソッドがSystem.out.printel(a)を実行する時です.このステートメントは、スレッドが本当に起動されていません.リソースを割り当てて実行しているのかもしれません.スレッドのリソース割り当てに時間がかかりますので、mainメソッドはt.start()メソッドを実行した後もSystem.out.printel(a)を実行し続けます.このとき得られた結果は、aはまだ変化されていない値0です.どうやって出力結果を5にすることができますか?実は簡単です.ジョンメソッドはこの機能を提供しています.join()メソッドは、この方法を呼び出すスレッドをこれまでに実行することができます.
コード:
/**
* @author QingHe
* Creation on 2005-12-19
*/

public class ThreadTest implements Runnable {
public static int a = 0;

public void run() {
for (int k = 0; k < 5; k++) {
a = a + 1;
}
}

public static void main(String[] args) throws Exception {
Runnable r = new ThreadTest();
Thread t = new Thread(r);
t.start();
t.join();
System.out.println(a);
}
}
この時、プログラム入力結果は常に5です.t.join()方法を使用しない場合、メインスレッドmain方法のSystem.out.println(a)を証明するために.ステートメントは先に実行します.私たちはメーンメソッドにループを追加できます.このサイクルはメーンメソッドの実行時間を延長するために使用されます.サイクルの回数はマシンの性能に大きく依存します.もし循環回数が適切であれば、aの出力結果も見られます.
コード: 
 


/**
* @author QingHe
* Creation on 2005-12-19
*/

public class ThreadTest implements Runnable {
public static int a = 0;

public void run() {
for (int k=0; k<5; k++) {
a = a + 1;
}
}

public static void main(String[] args) throws Exception {
Runnable r = new ThreadTest();
Thread t = new Thread(r);
t.start();
for (int i=0; i<300; i++) {
/*
, JVM ,

*/
System.out.print(i);
}
System.out.println();
System.out.println(a);
}
}