Java에서 스레드로부터 안전한 BlockingQueue란 무엇입니까? 언제 사용해야합니까? 구현 첨부

게시 됨: 2021-04-30
Java에서 Threadsafe BlockingQueue란 무엇이며 언제 사용해야 합니까?

지금까지 Crunchify에서 생산자 소비자 개념에 대한 두 개의 기사를 작성했습니다. 첫 번째는 Java Semaphore 및 Mutex에 대해 설명하고 두 번째는 동시 읽기/쓰기에 대해 설명합니다.

이 Java Tutorial에서는 동일한 생산자/소비자 개념을 살펴보고 BlockingQueue in Java 를 설명합니다.

Java에서 Blocking Queue의 장점은 무엇입니까?

java.util.Queue 는 요소를 검색할 때 대기열이 비어 있지 않을 때까지 대기하고 요소를 저장할 때 대기열에서 공간을 사용할 수 있을 때까지 기다리는 작업을 지원합니다.

자바의 java.util.BlockingQueue - Crunchify

4개의 Java 클래스를 생성해야 합니다.

  1. 메시지를 넣고 가져오는 CrunchifyMessage.java
  2. 큐에 메시지를 넣는 CrunchifyBlockingProducer.java
  3. 큐에서 메시지를 가져오는 CrunchifyBlockingConsumer.java
  4. 테스트 시작을 위한 CrunchifyBlockingMain.java

BlockingQueue 구현은 thread-safe 합니다. 모든 대기열 방법은 본질적으로 원자적이며 내부 잠금을 사용합니다.

Java에서 Thread-Safe BlockingQueue 구현을 시작하겠습니다.

1 단계

CrunchifyMessage.java 클래스를 생성합니다. 이것은 간단한 Java 객체입니다.

2 단계

간단한 msg를 생성한 생산자 CrunchifyBlockingProducer.java 를 생성하고 큐에 넣습니다.

3단계

큐에서 메시지를 소비하는 클래스 CrunchifyBlockingConsumer.java 를 만듭니다.

4단계

BlockingQueue 테스트를 실행하는 간단한 CrunchifyBlockingMain.java 메서드를 만듭니다. 이 프로그램을 실행하여 BlockingQueue 동작을 확인하십시오.

BlockingQueuenull 요소를 허용하지 않습니다. 구현에서는 null추가 , 넣거나 제공 하려는 시도에서 NullPointerException 이 발생합니다.

null 작업의 실패를 나타내는 센티넬 값으로 사용됩니다.

결과:

언제 java.util.concurrent.BlockingQueue를 사용해야 합니까?

  • 어떤 종류의 들어오는 요청을 조절하려면 같은 것을 사용해야합니다
  • 생산자는 무제한 대기열로 소비자보다 훨씬 앞서 나갈 수 있습니다. 소비자가 생산자를 따라잡지 않으면 OutOfMemoryError 가 발생할 수 있습니다. 이러한 상황에서는 잠재 생산자에게 대기열이 가득 찼다는 신호를 보내고 실패하면 빨리 포기하는 것이 좋습니다.
    • 즉, 생산자는 자연스럽게 제한됩니다.
  • 블로킹 큐는 일반적으로 동시 응용 프로그램에서 사용됩니다.
  • 정확하고 스레드로부터 안전한 구현을 제공합니다.
  • 메모리 소비도 제한되어야 합니다.