생산자와 소비자 --BlockingQueue

# 코드 :

공용  클래스 애플리케이션 { 

    공공  정적  무효 메인 (문자열 []에 args) { 

        BlockingQueue의 <정수> = 큐 새로운 ArrayBlockingQueue를 <> (6 ); 
        프로듀서 프로듀서 = 새로운 프로듀서 (큐); 
        소비자 소비자 = 새로운 소비자 (큐); 

        producer.produce ( 5 ); 
        consumer.consume ( 4 ); 
        producer.produce ( 3 ); 
        consumer.consume ( 2 ); 
    } 
} 

클래스 프로듀서 {
     개인BlockingQueue의 <정수> 큐; 

    공개 생산자 (BlockingQueue의 <정수> 큐) {
          .queue = 큐; 
    } 

    공공  무효의 생산 ( 최종  INT의 발은) {
         새로운 스레드 () {
             공공  무효 실행 () {
                 시도 {
                     INT의 잉여 = 발을;
                    반면 (잉여> 0 ) { 
                        queue.put ( 1024 ); 
                        흑자 - ;
                        System.out.printf ( "(%의 D) 생성 실제로 %의 D), 큐 크기 (%의 D) \ n (생산할 %의 계획" , 
                                는 Thread.currentThread (). getName (), 발, 1 , 큐. 크기()); 
                    } 
                } 캐치 (예외 : InterruptedException 전자) { 
                    e.printStackTrace (); 
                } 
            } 
        } .start (); 
    } 
} 

클래스 소비자 {
     개인 의 BlockingQueue <정수> 큐; 

    공용 사용자 (BlockingQueue의 <정수> 큐) {
          .queue =  큐;
    }

    공공  무효가 소비 ( 최종  INT의 발) {
         새로운 스레드 () {
             공공  무효 실행 () {
                 INT의 잉여 = 발;
                시도 {
                     동안 (잉여> 0 ) { 
                        queue.take (); 
                        흑자 - ; 
                        System.out.printf는 ( "%의 계획은 실제로 %의 D), 큐 크기 (%의 D) \ n (소비) %의 D (소비" , 
                                는 Thread.currentThread을 (). getName (), 발을, 1 , 큐. 크기());
                    } 
                } 캐치 (예외 : InterruptedException 전자) { 
                    e.printStackTrace (); 
                } 

            } 
        } .start (); 
    } 
}

 

# 출력 :

스레드 0 계획 (5)는, 실제로는 (1), 큐 크기는 (1)을 제조 생산하는
스레드 3 플랜 소비 (2) 실제 (1), 큐 크기 (0) 소비하는
스레드 2 계획 생산 (3 ), 실제로는 (1) 생산 큐 사이즈 (1)
스레드 1 플랜 실제로 1, 큐 크기 (0) 소비 (4) 소비
스레드 -2- 계획 (3)은, 실제로 제조 생산 (1) 큐의 크기는 (1)
실 -3- 계획 (2) 실제 (1), 큐 크기 (0) 소비하는 소비
스레드 0 계획 생성하기 (5), 실제로 제조 (1), 큐 크기 (1)
실 -2- 계획 (3)은, 실제로 제조 생산 (1), 큐 크기 (1)
스레드 1 플랜 소비 (4), 실제로는 (1), 큐 크기 (0) 소비하는
스레드 0 계획 사실 (5)을 제조하는 제조 (1), 큐 크기 (2)
스레드 1 평면 (4)는, 실제로는 (1), 큐 크기 (1)을 소비하는 소비
스레드 1 평면 (4) 실제로 1, 큐 크기는 (1) 소비하는 소비
(스레드 0 계획 생산 5 ), 실제로는 (1), 큐 크기를 생성 (2)
의 스레드 0 평면 (5)은, 실제로 제조 (1), 큐 크기를 생성하는 단계 (2)

# 과정에 관여하는 네 개의 스레드, 두 프로듀서, 두 소비자가 있습니다

추천

출처www.cnblogs.com/lwmp/p/11513136.html