작업 대기열은 순차적으로 처리되어야 합니다. 가장 간단한 접근 방식은 Future에서 .get()을 사용하여 각 작업 완료를 차단하는 것이지만, 이 접근 방식은 수많은 대기열을 관리할 때 메모리 문제를 일으킬 수 있습니다. 목표는 작업이 완료되면 호출자에게 알리는 비차단 메커니즘을 구현하여 작업이 차단 없이 순차적으로 처리되도록 하는 것입니다.
차단을 방지하려면 솔루션에 다음을 정의해야 합니다. 작업 완료 시 매개변수를 수신하는 콜백 인터페이스. 그런 다음 이 콜백은 각 작업이 끝날 때 호출됩니다.
class CallbackTask implements Runnable { private final Runnable task; private final Callback callback; CallbackTask(Runnable task, Callback callback) { this.task = task; this.callback = callback; } public void run() { task.run(); callback.complete(); } }
Java 8에서는 CompletableFuture를 도입했습니다. 비동기 및 조건부 파이프라인.
import java.util.concurrent.CompletableFuture; public class GetTaskNotificationWithoutBlocking { public static void main(String... argv) throws Exception { ExampleService svc = new ExampleService(); GetTaskNotificationWithoutBlocking listener = new GetTaskNotificationWithoutBlocking(); CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work); f.thenAccept(listener::notify); } }
ExampleService에서 클래스:
class ExampleService { String work() { // Code to perform long-running task return "Result from long-running task"; } }
리스너 클래스:
class GetTaskNotificationWithoutBlocking { void notify(String msg) { // Code to handle the message from the completed task } }
위 내용은 Java 실행기에서 차단하지 않고 작업 완료 알림을 받는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!