대기열은 모든 프로그래밍 언어의 중요한 측면입니다. 특히 우리가 이야기한다면 . 이 기사에서는 Java의 BlockingQueue 인터페이스에 대해 다음 순서로 설명합니다.
- Java의 BlockingQueue 인터페이스 란 무엇입니까?
- BlockingQueue 유형
- BlockingQueue 인터페이스의 메서드
- Java의 BlockingQueue 인터페이스 예제 : 서비스
Java의 BlockingQueue 인터페이스 란 무엇입니까?
Java의 BlockingQueue 인터페이스는 대기열에서 빼려고 할 때 대기열이 비어 있거나 항목을 대기열에 넣으려고 할 때 대기열이 이미 가득 찬 경우 차단하는 대기열입니다. 빈 대기열에서 빼려는 스레드는 다른 스레드가 항목을 대기열에 삽입 할 때까지 차단됩니다. 하나 이상의 항목을 대기열에서 빼거나 대기열을 완전히 지워서 다른 스레드가 대기열에 공간을 확보 할 때까지 전체 대기열에 항목을 추가하려는 스레드는 차단됩니다.
자바에서 확장하고 구현할 수 있습니까?
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 인터페이스'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.