문제

두 개의 스레드가 있습니다. 스레드 A는 큐에서 일부 요소를 당기고 있으며 스레드 B는 큐에 일부 요소를 추가합니다.

대기열이 비어있을 때 실 A가 잠을 자고 싶습니다.

스레드 B가 큐에 일부 요소를 추가하면 스레드 A가 작동하는지 확인해야합니다. Java에서 어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

a BlockingQueue,

Queue 이는 요소를 검색 할 때 대기열이 비어있을 때까지 대기하는 작업을 추가로 지원하고 요소를 저장할 때 대기열에서 공간을 사용할 때까지 기다립니다.

진심으로, 여기에서 바퀴를 재발 명하려고하지 마십시오.




(만약 너라면 ~ 해야 하다 대기/알림, 읽기를 사용하십시오 이 튜토리얼. 그러나 자신을 고통을 아끼십시오. 제발!)

다른 팁

몇 가지 세부 사항은 다음과 같습니다.

import java.concurrent.Executors;
import java.concurrent.ExecutorService;
...
ExecutorService executor = Executors.newFixedThreadPool(someNumberOfThreads);
...
executor.execute(someObjectThatImplementsRunnable);
...
executor.shutdownNow();

Java의 새로운 스레딩 기능이 전부입니다. Executor는 somenumberofthreads가있는 스레드 풀입니다. 차단 대기열에 의해 공급됩니다. 해야 할 일이 없으면 모든 실이 자고 있습니다. execute () 메소드를 사용하여 런닝 가능한 객체를 큐에 밀면 런닝 가능한 객체는 처리 할 수있는 스레드가있을 때까지 큐에 있습니다. 그런 다음 run () 메소드가 호출됩니다. 마지막으로, shutdownnow () 메소드는 풀의 모든 스레드를 종료하도록 신호를 보냅니다.

예전보다 훨씬 간단합니다.

(최소 및 최대 숫자의 스레드가있는 풀 또는 스레드를 호출하기 전에 최대 크기를 가진 큐와 같은 많은 변형이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top