1スレッド実装
java5前に、2次
の二つの方法、すなわち使用があるnew Thread()
とnewThread(runnable)
最初の直接呼び出しの形式thread的run
我々が使用する傾向があるので、この方法は、Thread
すなわち、サブカテゴリーをnew SubThread()
。2回目の呼び出し方法。Threadクラスを継承したとのRunnableを実装していますrunnable
run
1.1ベーシスThreadクラス
newThread(){}.start()
;これは、呼び出していることを示しThread
サブクラスオブジェクトrun
、メソッドnewThread(){}
示すThread
オブジェクト匿名サブクラスの例を、サブクラス加えてrun
次のようにコードです。
new Thread(){
public void run(){
//代码
}
}.start();
1.2ザ・Runnableをクラス
new Thread(newRunnable(){}).start()
;これは、コールことを示しThread
受ける対象Runnable
オブジェクトrun
方法、newRunnable(){}
示すRunnable
匿名オブジェクトのサブクラスの例runnable
サブクラスプラスrun
次のようなコードであります
new Thread(newRunnable(){
public void run(){
//代码
}
}
).start();
1.3スレッドプールの言葉遣い
java5
マルチスレッド開始、同様にスレッドプールの一部としてを作成する方法:
ExecutorService pool= Executors.newFixedThreadPool(3)
for(inti=0;i<10;i++){
pool.execute(new Runable(){public voidrun(){}});
}
//或者另外一种写法
Executors.newCachedThreadPool().execute(newRunable(){public void run(){}});
//或者又有另一种写法
Executors.newSingleThreadExecutor().execute(newRunable(){public void run(){}});
2ストップとメソッドを一時停止
synchronized
キーワード同期方法を変更し
、使用に対してstop()
、それは安全ではありませんので、。これは、スレッドによって取得したすべてのロックを解除し、オブジェクトが不整合な状態にある場合、ので、他のスレッドがその状態でそれらをチェックし、修正することができます。結果は、現実の問題をチェックアウトすることは困難です。
suspend()
デッドロックが発生しやすい方法。通話suspend()
時間、ターゲットスレッドは停止しますが、彼らはまだ得の前でロックを保持します。しない限り、この時点では、他のスレッドは、ロックされたリソースにアクセスできる"挂起"
スレッドが実行を再開します。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源
これは、デッドロックが発生します。これは、使用すべきではありませんsuspend()
が、彼のThreadクラスに記号を置く必要があり、スレッドは、そのアクティブまたは中断指摘されるべきです。フラグは、スレッドがハングアップする必要があることを示している場合、彼らはそれが待機状態に入るコマンド()待機を使用しています。フラグは、スレッドが復元されるべきであることを示す場合、スレッドを再起動するよう通知する()を使用します。