자바 차단 대기 열 실현 원리 및 인 스 턴 스 분석

이 글 은 주로 자바 차단 대기 열 실현 원리 와 사례 분석 을 소개 하 였 으 며,글 에 서 는 예제 코드 를 통 해 매우 상세 하 게 소개 하 였 으 며,여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 고 있 으 며,필요 한 친 구 는 참고 할 수 있 습 니 다.
차단 대기 열 은 일반 대기 열과 다르다.대기 열 이 비어 있 을 때 대기 열 에서 요 소 를 가 져 오 는 작업 이 막 히 거나 대기 열 이 가득 찼 을 때 대기 열 에 요 소 를 추가 하면 막 힙 니 다.빈 차단 대기 열 에서 원 소 를 가 져 오 려 는 스 레 드 가 막 힐 것 입 니 다.다른 스 레 드 가 빈 대기 열 에 새로운 요 소 를 삽입 할 때 까지.마찬가지 로 가득 찬 차단 대기 열 에 새 요 소 를 추가 하려 는 스 레 드 역시 막 힐 것 입 니 다.다른 스 레 드 가 대기 열 을 다시 비 울 때 까지 대기 열 에서 하나 이상 의 요 소 를 제거 하거나 대기 열 을 완전히 비 울 때 까지 다음 그림 은 차단 대기 열 을 통 해 합작 하 는 방법 을 보 여 줍 니 다.

스 레 드 1 은 차단 대기 열 에 요 소 를 추가 하고 스 레 드 2 는 차단 대기 열 에서 요 소 를 제거 합 니 다.
5.0 부터 JDK 는 자바 util.concurrent 패키지 에서 차단 대기 열의 공식 구현 을 제공 합 니 다.JDK 에는 차단 대열 의 공식 실현 이 포함 되 어 있 지만
대기 열의 실현 을 막다
차단 대기 열의 실현 은 상한 선 을 가 진 Semaphore 와 유사 합 니 다.
쓸데없는 말 을 많이 하지 않다.

package com.huojg.test;
import java.util.LinkedList;
import java.util.List;
public class BlockingQueue { 
   private List queue = new LinkedList(); 
   private int limit = 10;    
   public BlockingQueue(int limit){ 
    this.limit = limit; 
   }      
   public synchronized void enqueue(Object item) 
   throws InterruptedException { 
    while(this.queue.size() == this.limit) { 
     wait(); 
    } 
    if(this.queue.size() == 0) { 
     notifyAll(); 
    } 
    this.queue.add(item); 
   }   
   public synchronized Object dequeue() 
   throws InterruptedException{ 
    while(this.queue.size() == 0){ 
     wait(); 
    } 
    if(this.queue.size() == this.limit){ 
     notifyAll(); 
    } 
    return this.queue.remove(0); 
   } 
  } 
enqueue 와 dequeue 방법 내부 에 서 는 대기 열의 크기 가 상한(limit)이나 하한(0)일 때 만 notify All 방법 을 호출 한 다 는 것 을 알 아야 합 니 다.만약 에 대기 열의 크기 가 상한 선 과 같 지 않 고 하한 선 과 같 지 않 으 면 모든 스 레 드 가 enqueue 나 dequeue 방법 을 호출 할 때 막 히 지 않 고 정상적으로 대기 열 에 요 소 를 추가 하거나 제거 할 수 있 습 니 다.
자바 에 서 는 Lock 과 Condition 에 대해 전통 적 인 synchronized 와 wait/notify 체제 에 대한 대체 로 이해 할 수 있 습 니 다.
wait/notify 에 제한 이 있 습 니 다.wait/notify 를 호출 하 는 스 레 드 는 대상 의 자 물 쇠 를 가 져 야 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기