Runnableをスレッドの安全性の問題のJavaのsynchronizedブロック処理の実装



/ **
*例:3つのチケットの窓、、Runnableインタフェースを実装する100個の方法のための投票の合計数を作成します。
*
* 1.問題:チケットを販売するプロセスは、重い投票、間違った投票があった- >スレッドを浮上しましたセキュリティ上の
理由から* 2.問題:チケットオペレーションのスレッド処理、完了すると、他のスレッドが関与も、チケットはまだ運用を運営しています。
* 3.修正方法:スレッドが動作時のチケットは、他のスレッドが参加できない場合。運転までのスレッドが完了チケットがある場合は、他の
*スレッドが前にそれが操作チケットを始めることができます。これはさえブロックされたスレッド発生し、変更することはできません。
*
*
* 4ではJavaは、我々はアドレスセキュリティ問題のスレッドに同期メカニズムを可決しました。
*
*方法:同期コードブロック
*
*同期(シンクモニタ){
コード同期する* //必要
*
*}
*説明:1.オペレーションコード共有データ、同期されるコード。- >より多くのコードを含めることはできません、と少ないコードを含めることはできません。
* 2.共有データ:変数複数スレッド共同作業。たとえば:チケットは、データの共有です。
ロック:として一般的に知られている* 3。同期モニタ、。クラスの任意のオブジェクトは、ロックとして機能することができます。
*要件:複数のスレッドが同じロックを共有する必要があります。
*
*追加:複数のスレッドを作成するには、Runnableインタフェースを達成するための方法では、我々は、同期モニターとしてこの行為を考えることができます。
*第二の方法:同期方法。
*完全な宣言操作する方法で、共有データへのコードならば、我々としても、同期、このメソッドを宣言するかもしれません。
*
*
* 5.同期、アドレスのセキュリティ問題のスレッド。---メリット
*操作の同期コードは、一つのスレッドだけに参加するために、他のスレッドが待機します。シングルスレッドのプロセスの同等物は非効率的です。制限---
*
* /
クラスウィンドウ1を実装したRunnable {

プライベートint型のチケット= 100;
//オブジェクトOBJ =新しい新しいオブジェクト();
//新しい新しい犬犬犬=();
@Override
ます。public void RUN(){
//オブジェクト=新しい新しいオブジェクトobj();
(真の)しばらく{
同期この(この){//この場合:唯一の二つの方法をWindow1オブジェクト@:同期(犬){

IF(チケット> 0){

試み{
Thread.sleep(100)。
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}

のSystem.out.println(にThread.currentThread()のgetName()+ ":卖票、票号为:" +チケット)。


チケット - ;
}他{
ブレーク。
}
}
}
}
}


publicクラスWindowTest1 {
パブリック静的無効メイン(文字列[] args){
Wウィンドウ1 =新たなウィンドウ1();

スレッドT1は、新しいスレッドを(W)=。
スレッドT2は、新しいスレッドを(W)=。
スレッドT3は、新しいスレッドを(W)=。

t1.setName( "窗口1")。
t2.setName( "窗口2")。
t3.setName( "窗口3")。

t1.start();
t2.start();
t3.start();
}

}


クラス犬{

}

おすすめ

転載: www.cnblogs.com/wpy188/p/12099882.html