산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 ArrayBlockingQueue

자바 ArrayBlockingQueue

이 자습서에서는 예제를 통해 ArrayBlockingQueue 클래스와 해당 메서드에 대해 알아봅니다.

ArrayBlockingQueue Java Collections 프레임워크의 클래스는 배열을 사용하여 차단 대기열 구현을 제공합니다.

Java BlockingQueue 인터페이스를 구현합니다.

<시간>

ArrayBlockingQueue 생성

배열 차단 대기열을 생성하려면 java.util.concurrent.ArrayBlockingQueue를 가져와야 합니다. 패키지.

패키지를 가져온 후 Java에서 배열 차단 대기열을 만드는 방법은 다음과 같습니다.

ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity);

여기,

예를 들어,

// Creating String type ArrayBlockingQueue with size 5
ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

// Creating Integer type ArrayBlockingQueue with size 5
ArrayBlockingQueue<Integer> age = new ArrayBlockingQueue<>(5);

참고: 배열의 크기를 제공하는 것은 필수입니다.

<시간>

ArrayBlockingQueue의 메소드

ArrayBlockingQueue 클래스는 BlockingQueue의 모든 메서드 구현을 제공합니다. 인터페이스.

이러한 메서드는 배열 차단 대기열에서 요소를 삽입, 액세스 및 삭제하는 데 사용됩니다.

또한 두 가지 방법 put()에 대해 배웁니다. 및 take() 배열 블로킹 큐에서 블로킹 작업을 지원합니다.

이 두 가지 방법은 배열 차단 대기열을 다른 일반적인 대기열과 구별합니다.

<시간>

요소 삽입

예를 들어,

import java.util.concurrent.ArrayBlockingQueue;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

        // Using add()
        animals.add("Dog");
        animals.add("Cat");

        // Using offer()
        animals.offer("Horse");
        System.out.println("ArrayBlockingQueue: " + animals);
    }
}

출력

ArrayBlockingQueue: [Dog, Cat, Horse]
<시간>

액세스 요소

예를 들어,

import java.util.concurrent.ArrayBlockingQueue;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

        // Add elements
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayBlockingQueue: " + animals);

        // Using peek()
        String element = animals.peek();
        System.out.println("Accessed Element: " + element);

        // Using iterator()
        Iterator<String> iterate = animals.iterator();
        System.out.print("ArrayBlockingQueue Elements: ");

        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

출력

ArrayBlockingQueue: [Dog, Cat, Horse]
Accessed Element: Dog
ArrayBlockingQueue Elements: Dog, Cat, Horse,
<시간>

요소 제거

예를 들어,

import java.util.concurrent.ArrayBlockingQueue;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayBlockingQueue: " + animals);

        // Using remove()
        String element1 = animals.remove();
        System.out.println("Removed Element:");
        System.out.println("Using remove(): " + element1);

        // Using poll()
        String element2 = animals.poll();
        System.out.println("Using poll(): " + element2);

        // Using clear()
        animals.clear();
        System.out.println("Updated ArrayBlockingQueue: " + animals);
    }
}

출력

ArrayBlockingQueue: [Dog, Cat, Horse]
Removed Elements:
Using remove(): Dog
Using poll(): Cat
Updated ArrayBlockingQueue: []
<시간>

put() 및 take() 메소드

멀티스레딩 프로세스에서 put()을 사용할 수 있습니다. 및 take() 한 스레드의 작업을 차단하여 다른 스레드와 동기화합니다. 이 메서드는 성공적으로 실행될 때까지 대기합니다.

<시간>

put() 메소드

배열 차단 대기열의 끝에 요소를 추가하려면 put()을 사용할 수 있습니다. 방법.

배열 블로킹 큐가 가득 차면 배열 블로킹 큐에 요소를 추가할 공간이 생길 때까지 기다립니다.

예를 들어,

import java.util.concurrent.ArrayBlockingQueue;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

       try {
        // Add elements to animals
           animals.put("Dog");
           animals.put("Cat");
           System.out.println("ArrayBlockingQueue: " + animals);
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}

출력

ArrayBlockingQueue: [Dog, Cat]

여기에서 put() 메소드에서 InterruptedException이 발생할 수 있습니다. 기다리는 동안 중단된 경우. 따라서 try..catch 안에 넣어야 합니다. 차단합니다.

<시간>

take() 메소드

배열 차단 대기열의 앞쪽에서 요소를 반환하고 제거하려면 take()을 사용할 수 있습니다. 방법.

배열 블로킹 큐가 비어 있으면 배열 블로킹 큐에 삭제할 요소가 있을 때까지 기다립니다.

예를 들어,

import java.util.concurrent.ArrayBlockingQueue;

class Main {
    public static void main(String[] args) {
        ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

       try {
           //Add elements to animals
           animals.put("Dog");
           animals.put("Cat");
           System.out.println("ArrayBlockingQueue: " + animals);

           // Remove an element
           String element = animals.take();
           System.out.println("Removed Element: " + element);
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}

출력

ArrayBlockingQueue: [Dog, Cat]
Removed Element: Dog

여기에서 take() 메소드는 InterrupedException를 발생시킵니다. 기다리는 동안 중단된 경우. 따라서 try...catch 안에 넣어야 합니다. 차단합니다.

<시간>

기타 방법

메소드 설명
contains(element) 지정된 요소에 대한 배열 차단 대기열을 검색합니다.요소가 발견되면 true를 반환합니다. , 그렇지 않으면 false을 반환합니다. .
size() 배열 차단 큐의 길이를 반환합니다.
toArray() 배열 차단 큐를 배열로 변환하고 반환합니다.
toString() 배열 차단 큐를 문자열로 변환
<시간>

ArrayBlockingQueue를 사용하는 이유

ArrayBlockingQueue 어레이를 내부 저장소로 사용합니다.

스레드 안전으로 간주됩니다. 수집. 따라서 일반적으로 멀티 스레딩 응용 프로그램에서 사용됩니다.

한 스레드가 큐에 요소를 삽입하고 다른 스레드가 큐에서 요소를 제거한다고 가정합니다.

이제 첫 번째 스레드가 두 번째 스레드보다 느린 경우 배열 블로킹 큐는 첫 번째 스레드가 작업을 완료할 때까지 두 번째 스레드가 기다리게 할 수 있습니다.


java

  1. 자바 연산자
  2. 자바 주석
  3. 자바 for-each 루프
  4. 자바 문자열
  5. 자바 인터페이스
  6. 자바 익명 클래스
  7. 자바 리소스 사용
  8. 자바 주석
  9. 자바 어설션
  10. 자바 벡터