Java에서 BlockingQueue 인터페이스를 구현하는 방법



이 기사는 Java에서 BlockingQueue 인터페이스를 구현하는 방법에 대한 상세하고 포괄적 인 지식을 제공합니다.

대기열은 모든 프로그래밍 언어의 중요한 측면입니다. 특히 우리가 이야기한다면 . 이 기사에서는 Java의 BlockingQueue 인터페이스에 대해 다음 순서로 설명합니다.

Java의 BlockingQueue 인터페이스 란 무엇입니까?

Java의 BlockingQueue 인터페이스는 대기열에서 빼려고 할 때 대기열이 비어 있거나 항목을 대기열에 넣으려고 할 때 대기열이 이미 가득 찬 경우 차단하는 대기열입니다. 빈 대기열에서 빼려는 스레드는 다른 스레드가 항목을 대기열에 삽입 할 때까지 차단됩니다. 하나 이상의 항목을 대기열에서 빼거나 ​​대기열을 완전히 지워서 다른 스레드가 대기열에 공간을 확보 할 때까지 전체 대기열에 항목을 추가하려는 스레드는 차단됩니다.





C ++의 우선 순위 대기열

자바에서 확장하고 구현할 수 있습니까?

Java의 BlockingQueue 인터페이스는 허용하지 않습니다.없는가치와 던져NullPointerException대기열에 null 값을 저장하려는 경우.Java BlockingQueue 구현은 다음과 같습니다. 스레드로부터 안전한 . 모든 큐잉 방법은 본질적으로 원자 적이며 내부 잠금 또는 다른 형태의 동시성 제어를 사용합니다.



자바 대기열 클래스 다이어그램

Java Queue 인터페이스는 Collection 인터페이스를 확장합니다. Collection 인터페이스는 Iterable 인터페이스를 확장합니다. 자주 사용되는 큐 구현 클래스 중 일부는 LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,등. AbstractQueue는 Queue를 구현하는 노력을 줄이기 위해 Queue 인터페이스의 골격 구현을 제공합니다.

BlockingQueue 유형

BlockingQueue는 두 가지 유형입니다.



  • 무제한 대기열 : 차단 대기열의 용량은 Integer.MAX_VALUE로 설정됩니다. 제한되지 않은 차단 대기열의 경우 대기열이 매우 커질 수 있으므로 차단되지 않습니다. 요소를 추가하면 크기가 커집니다.

통사론:
BlockingQueue 차단 대기열 = new LinkedBlockingDeque ()

  • 제한된 대기열 : 두 번째 유형의 큐는 바인딩 된 큐입니다. 제한된 큐의 경우 큐 생성자에서 큐의 용량을 우회하여 큐를 만들 수 있습니다.
    통사론:
    // 용량이 5 인 차단 대기열을 만듭니다.

BlockingQueue 차단 대기열 = new LinkedBlockingDeque (5)

BlockingQueue 인터페이스의 메서드

변경 유형 방법 구문 사용 기술
부울 추가 (E 및) 삽입

용량 제한을 위반하지 않고 즉시 수행 할 수있는 경우 지정된 요소를이 큐에 삽입하고, 성공하면 true를 리턴하고 현재 사용 가능한 공간이 없으면 IllegalStateException을 발생시킵니다.

부울 contains (Object o) 조사

이 큐에 지정된 요소가 포함 된 경우 true를 반환합니다.

int drainTo (콜렉션 c) 검색 또는 제거

이 큐에서 사용 가능한 모든 요소를 ​​제거하고 지정된 컬렉션에 추가합니다.

int drainTo (컬렉션 c, int maxElements) 검색 또는 제거

이 큐에서 사용 가능한 요소의 주어진 개수 이하를 제거하고 지정된 컬렉션에 추가합니다.

부울 제안 (E 및) 삽입

용량 제한을 위반하지 않고 즉시 수행 할 수있는 경우 지정된 요소를이 큐에 삽입하고 성공하면 true를 반환하고 현재 사용 가능한 공간이 없으면 false를 반환합니다.

부울 offer (E e, 긴 시간 초과, TimeUnit 단위) 삽입

공간을 사용할 수있을 때까지 필요한 경우 지정된 대기 시간까지 대기하면서 지정된 요소를이 큐에 삽입합니다.

C ++ 가상 함수 = 0
IS poll (긴 타임 아웃, TimeUnit 단위) 검색 또는 제거

요소를 사용할 수있을 때까지 필요한 경우 지정된 대기 시간까지 대기하면서이 큐의 헤드를 검색하고 제거합니다.

넣어 (E e) 삽입

공간을 사용할 수있을 때까지 필요한 경우 대기하면서 지정된 요소를이 큐에 삽입합니다.

자바에서 메소드 오버로딩 및 메소드 오버라이드
int 남은 용량 () 조사

이 큐가 차단없이 이상적으로 (메모리 또는 리소스 제약이없는 경우) 수용 할 수있는 추가 요소의 수를 반환하거나 고유 한 제한이없는 경우 Integer.MAX_VALUE를 반환합니다.

부울 remove (Object o) + 검색 또는 제거

이 큐에서 지정된 요소의 단일 인스턴스를 제거합니다.있는 경우.

IS 취하다() 검색 또는 제거

필요한 경우 요소를 사용할 수있을 때까지 대기하면서이 큐의 헤드를 검색하고 제거합니다.

Java의 BlockingQueue 인터페이스 예제 : 서비스

package com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue public class ProducerConsumerService {public static void main (String [] args) {// 10 크기의 BlockingQueue 생성 BlockingQueue queue = new ArrayBlockingQueue ( 10) Producer Producer = new Producer (queue) Consumer consumer = new Consumer (queue) // 큐에서 메시지를 생성하기 위해 생성자 시작 new Thread (producer) .start () // 큐에서 메시지를 소비하기 위해 소비자 시작 new Thread (consumer) .start () System.out.println ( '생산자 및 소비자가 시작되었습니다')}}

이것으로 우리는 Java 기사의 BlockingQueue 인터페이스를 마칩니다. 이제 모든 개념이 명확 해지기를 바랍니다.

확인 전 세계에 걸쳐 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 'Java의 BlockingQueue 인터페이스'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.