자바 멀티 스레딩, 동기화 된 액세스, 나사 잠금, 잠금 개체는 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 () ;
             은 try { 
                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