English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 Java BlockingQueue 인터페이스 및 메서드를 배웁니다.
Java Collections 프레임워크의 BlockingQueue 인터페이스는 Queue 인터페이스를 확장합니다. 어떤 작업도 성공적으로 수행될 때까지 기다릴 수 있습니다.
예를 들어, 비어 있는 큐에서 요소를 제거하려면, 락링크 큐는 제거 작업이队列에 일부 요소가 포함되기를 기다리게 합니다.
BlockingQueue는 인터페이스이므로 직접 구현을 제공할 수 없습니다.
BlockingQueue의 기능을 사용하려면 그 구현을 사용해야 합니다.
BlockingQueue를 사용하려면 java.util.concurrent.BlockingQueue 패키지를 가져와야 합니다.
//BlockingQueue의 Array 구현 BlockingQueue<String> animal1 = new ArraryBlockingQueue<>(); //BlockingQueue의 LinkedList 구현 BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();
여기서, 우리는 ArrayBlockingQueue와 LinkedBlockingQueue의 객체 animal을 각각 생성합니다.1및 animal2이 객체는 BlockingQueue 인터페이스의 기능을 사용할 수 있습니다.
큐가 가득 차거나 비어 있는지에 따라, 락링크 큐의 메서드는 나눌 수 있습니다.3클래스:
add() - 요소를 큐의 마지막에 삽입합니다. 큐가 가득 차 있으면 예외를 발생시킵니다.
element() - 락링크 큐의 머리를 반환합니다. 큐가 비어 있으면 예외를 발생시킵니다.
remove() -락링크 큐에서 요소를 제거합니다. 큐가 비어 있으면 예외를 발생시킵니다.
offer() - 지정된 요소를 큐의 마지막에 삽입합니다. 큐가 가득 차 있으면 false를 반환합니다.
peek() - 락링크 큐의 머리를 반환합니다. 큐가 비어 있으면 null을 반환합니다.
poll() - 락링크 큐에서 요소를 제거합니다. 큐가 비어 있으면 null을 반환합니다.
offer()와 poll()더 많은 내용
offer()와 poll() 메서드는 타임아웃과 함께 사용할 수 있습니다. 즉, 우리는 시간 단위를 매개변수로 전달할 수 있습니다. 예를 들어,
offer(value, 100, milliseconds)
여기서는
value는 큐에 삽입할 요소입니다
그리고 우리는 타임아웃을100 밀리초
이는 offer() 메서드가 브로킹 큐에 요소를 삽입하려고 시도하는 시간을 의미합니다.100 밀리초. 만약100 밀리초 내에 요소를 삽입할 수 없으며, 이 메서드는 false를 반환합니다.
주의:밀리초 외에도 offer()와 poll() 메서드에서 다음 시간 단위를 사용할 수 있습니다: days, hours, minutes, seconds, microseconds, nanoseconds.
브로킹 큐는 큐가 가득 차거나 비어 있을 때 블록된 작업과 기다림을 제공하는 몇 가지 메서드도 제공합니다.
put() - 요소를 브로킹 큐에 삽입합니다. 큐가 가득 차 있으면 큐에 공간이 생기면까지 기다립니다.
take() - 브로킹 큐에서 요소를 제거하고 반환합니다. 큐가 비어 있으면 제거할 요소가 큐에 포함될 때까지 기다립니다.
예를 들어, 우리가 큐에 요소를 삽입하고자 한다면. 큐가 가득 차 있으면 put() 메서드는 큐에 공간이 생기면까지 기다립니다.
또한, 우리가 큐에서 요소를 제거하고자 한다면. 큐가 비어 있으면 take() 메서드는 제거할 요소가 큐에 포함될 때까지 기다립니다.
import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; class Main { public static void main(String[] args) { //ArrayBlockingQueue를 사용하여 브로킹 큐를 생성합니다. BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5); try { //브로킹 큐에 요소를 삽입합니다. numbers.put(2); numbers.put(1); numbers.put(3); System.out.println("BLockingQueue: " + numbers); //브로킹 큐에서 요소를 제거합니다. int removedNumber = numbers.take(); System.out.println("제거된 숫자: ")} + removedNumber); } catch(Exception e) { e.getStackTrace(); } } }
출력 결과
BlockingQueue: [2, 1, 3] 제거된 요소: 2
ArrayBlockingQueue에 대해 더 알고 싶다면 다음 사이트를 방문하세요:Java ArrayBlockingQueue.
Java에서 BlockingQueue는 다음과 같이 보입니다:스레드 보안집합. 이는 다중 스레드 작업에서 도움이 될 수 있습니다.
한 스레드가 요소를 큐에 삽입하고 다른 스레드가 큐에서 요소를 제거하는 경우를 가정해 보겠습니다.
지금, 첫 번째 스레드의 실행 속도가 느리다면, 블록 퀸드는 두 번째 스레드가 첫 번째 스레드가 작업을 완료할 때까지 기다릴 수 있도록 합니다.