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を呼び出すまで待機セットに現在のスレッドは、ブロックされたとき。