お勧めできませんなぜ三つの方法、ストップ(内のスレッドを実装)と()メソッドを一時停止するJava

1スレッド実装

java5前に、2次
の二つの方法、すなわち使用があるnew Thread()newThread(runnable)最初の直接呼び出しの形式thread的run我々が使用する傾向があるので、この方法は、Threadすなわち、サブカテゴリーをnew SubThread()2回目の呼び出し方法。Threadクラスを継承したとのRunnableを実装していますrunnablerun

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クラスに記号を置く必要があり、スレッドは、そのアクティブまたは中断指摘されるべきです。フラグは、スレッドがハングアップする必要があることを示している場合、彼らはそれが待機状態に入るコマンド()待機を使用しています。フラグは、スレッドが復元されるべきであることを示す場合、スレッドを再起動するよう通知する()を使用します。

公開された334元の記事 ウォンの賞賛186 ビュー310 000 +

おすすめ

転載: blog.csdn.net/u012060033/article/details/103873590