본문 바로가기
언어/Java

Java - Future

by newlibra 2025. 1. 21.
import java.time.LocalTime;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class JavaFuture1
{
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //ExecutorService 초기화
        ExecutorService executor = Executors.newSingleThreadExecutor();

        //Callable Task 생성
        Callable<String> callableTask = () -> {
            System.out.println(LocalTime.now() + " Task Start");
            Thread.sleep(1000L);
            return "Task Result";
        };

        //submit() 메서드로 Task 실행
        Future<String> future = executor.submit(callableTask);

        System.out.println(LocalTime.now() + " Waiting the task done");
        System.out.println("isDone 1 = " + future.isDone());
        String result = future.get();  //Task 결과 대기
        System.out.println("isDone 2 = " + future.isDone());
        System.out.println(LocalTime.now() + " future.get() = " + result);
    }
}

 

import java.time.LocalTime;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class JavaFuture2 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        Callable<String> callableTask = () -> {
            System.out.println(LocalTime.now() + " Task Start");
            Thread.sleep(2000L);
            System.out.println(LocalTime.now() + " Task End");
            return "Task Result";
        };

        Future<String> future = executor.submit(callableTask);

        System.out.println(LocalTime.now() + " Waiting the task done");
        String result = null;
        try {
            result = future.get(1000, TimeUnit.MILLISECONDS);
        } catch (TimeoutException e) {
            System.out.println(LocalTime.now() + " TimeoutException 발생");
        }
        System.out.println(LocalTime.now() + " future.get() = " + result);
    }	
}

 

 

import java.time.LocalTime;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class JavaFuture3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        Callable<String> callableTask = () -> {
            System.out.println(LocalTime.now() + " Task Start");
            Thread.sleep(2000L);
            return "Task Result";
        };

        Future<String> future = executor.submit(callableTask);
        Thread.sleep(1000L);
        boolean cancelResult = future.cancel(true);
        System.out.println("cancelResult = " + cancelResult);
        System.out.println("isCancelled = " + future.isCancelled());

        String result = future.get();  //Task 결과 대기
        System.out.println(LocalTime.now() + " future.get() = " + result);
    }
}

 

 

https://wildeveloperetrain.tistory.com/141

 

Java - Future Interface 비동기적 연산 작업을 위한 인터페이스

Java에서 비동기적 연산 작업을 위해 만들어진 인터페이스인 Future에 대해서 살펴봅니다. Future란, 자바 1.5에서 나온 인터페이스로 비동기적 연산의 처리 결과를 표현하기 위해 사용됩니다. 비동

wildeveloperetrain.tistory.com

 

'언어 > Java' 카테고리의 다른 글

compile & run  (0) 2024.08.23
tomcat  (0) 2024.07.08
GraalVM  (0) 2024.07.04
람다....  (0) 2024.06.11
spring boot compile  (0) 2023.12.18