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

자바 LinkedBlockingQueue

자바 LinkedBlockingQueue

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

LinkedBlockingQueue Java Collections 클래스 프레임워크는 연결 목록을 사용하여 차단 대기열 구현을 제공합니다.

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

<시간>

LinkedBlockingQueue 생성

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

Java에서 연결된 차단 대기열을 만드는 방법은 다음과 같습니다.

1. 초기 용량 없음

LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>();

여기서 기본 초기 용량은 2 31 입니다. -1.

2. 초기 용량

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

여기,

예를 들어,

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

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

참고: 연결 리스트의 크기를 반드시 제공해야 하는 것은 아닙니다.

<시간>

LinkedBlockingQueue의 메소드

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

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

또한 두 가지 방법 put()에 대해 배웁니다. 및 take() 연결된 차단 대기열에서 차단 작업을 지원합니다.

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

<시간>

요소 삽입

예를 들어,

import java.util.concurrent.LinkedBlockingQueue;

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

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

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

출력

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

액세스 요소

예를 들어,

import java.util.concurrent.LinkedBlockingQueue;
import java.util.Iterator;

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

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

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

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

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

출력

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

요소 제거

예를 들어,

import java.util.concurrent.LinkedBlockingQueue;

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

        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("LinkedBlockingQueue " + 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 LinkedBlockingQueue " + animals);
    }
}

출력

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

put() 및 take() 메소드

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

<시간>

put() 메소드

연결된 차단 대기열의 끝에 지정된 요소를 삽입하려면 put()를 사용합니다. 방법.

연결된 차단 큐가 가득 차면 연결된 차단 대기열에 요소를 삽입할 공간이 생길 때까지 기다립니다.

예를 들어,

import java.util.concurrent.LinkedBlockingQueue;

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

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

출력

LinkedBlockingQueue: [Dog, Cat]

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

<시간>

take() 메소드

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

연결된 차단 대기열이 비어 있으면 연결된 차단 대기열에 삭제할 요소가 있을 때까지 기다립니다.

예를 들어,

import java.util.concurrent.LinkedBlockingQueue;

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

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

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

출력

LinkedBlockingQueue: [Dog, Cat]
Removed Element: Dog
New LinkedBlockingQueue: [Cat]

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

<시간>

기타 방법

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

LinkedBlockingQueue를 사용하는 이유

LinkedBlockingQueue 연결 목록을 내부 저장소로 사용합니다.

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

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

이제 첫 번째 스레드가 두 번째 스레드보다 느린 경우 연결된 차단 큐는 첫 번째 스레드가 작업을 완료할 때까지 두 번째 스레드가 기다리게 할 수 있습니다.


java

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