Javaのマルチスレッド、同期アクセス、スレッドロック、ロックオブジェクトは、ReentrantLockのは、同期

1.なぜ、データへのアクセスを同期?

  複数のスレッドが同じデータへのアクセスを共有する必要がある場合は、共有データの破損が発生する可能性があります。

2.同期した方法を達成するために

  2.1 ReentrantLockの类

    学校のクラス:

        クラス学校{ 
        
            プライベート int型stuNum。
            プライベートロックロック。
民間の条件条件
        
            パブリック・スクール(int型stuNum){
                 この .stuNum = stuNum。
                ロック = 新しいReentrantLockの(); 
                条件 = lock.newCondition()。
            } 
        ......

    オブジェクトロックがロックされており、条件は、オブジェクトの状態で、

    使用法:

        公共 ボイドstuNums1(){
             lock.lock() 試す{
                 ながら(stuNum <20 ){ 
                    するSystem.out.println(stuNum +」<20、等待数量变为20" )。
                    condition.await() ; 
                } 
                stuNum - = 5 
                System.out.println(。にThread.currentThread()のtoString() + ":" + stuNum)。
            } キャッチ(InterruptedExceptionある電子){ 
                e.printStackTrace(); 
            } 最後に{
                lock.unlock() ; 
            } 

        } 
        公共 ボイドstuNums2(){
             Lock.lock() ;
             試み{ 
                stuNum + = 1 ; 
                のSystem.out.println(にThread.currentThread()のtoString() + ":" + stuNum)。
                 IF(stuNum> = 20){ 
                    するSystem.out.println(stuNum + "> 20セットを待ってウェイクアップスレッドの開始である");
                     condition.signalAll() ; 
                } 
            } 最後に{
                 lock.unlock()  
            }

        }

    条件オブジェクトの呼び出しが待つ場合()メソッド別のスレッドが同じ条件()メソッドにsignalAllを呼び出すまで待機セットに現在のスレッドは、ブロックされたとき。

 

おすすめ

転載: www.cnblogs.com/lovleo/p/11318623.html
おすすめ