>Java >java지도 시간 >Java 실행기에서 차단하지 않고 작업 완료 알림을 받는 방법은 무엇입니까?

Java 실행기에서 차단하지 않고 작업 완료 알림을 받는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-17 05:57:03770검색

How to Get Task Completion Notifications Without Blocking in Java Executors?

Java 실행자: 작업 완료 시 차단하지 않고 알림

문제 설명

작업 대기열은 순차적으로 처리되어야 합니다. 가장 간단한 접근 방식은 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();
  }

}

CompletableFuture

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.