Future은 비동기 계산의 결과를 나타냅니다. 이를 통해 계산이 완료되었는지 확인하고, 완료를 기다리며 계산 결과를 검색할 수 있는 메서드가 제공됩니다. 계산이 완료된 경우에만 get 메서드를 사용하여 결과를 검색할 수 있으며, 필요한 경우 준비될 때까지 블로킹됩니다. 작업을 취소하려면 cancel 메서드를 사용합니다. 작업이 정상적으로 완료되었는지 아니면 취소되었는지를 확인하기 위한 추가적인 메서드도 제공됩니다. 한번 계산이 완료되면 작업을 취소할 수 없습니다. 작업의 결과를 사용하지 않고 취소 가능성을 위해 Future를 사용하려면 Future 형식을 선언하고 기본 작업의 결과로 null을 반환할 수 있습니다. Future 메서드 cancel(boolean) : 작업을 취소하려고 시도합니다. 작업이..
여러 종류의 작업을 스케줄링하여 주어진 시간 뒤에 실행하거나 주기적으로 실행할 수 있는 ExecutorService입니다. 실행을 취소하거나 확인할 수 있는 객체를 반환합니다. Executor의 execute 및 ExecutorService의 submit 메서드는 시간 0으로 요청됩니다. 이 요청은 즉시 실행으로 처리됩니다. schedule 메서드는 절대적인 시간이 아닌 상대적인 시간 및 주기를 파라미터로 받습니다. Date로 표현된 절대시간을 상대적인 시간으로 변환하는 것은 간단한 일입니다. 예를 들면 특정 날짜에 schedule 할려면 date.getTime() - System.currentTimeMillis()로 계산하면 됩니다. ScheduledExecutorService 메서드 schedule(..
Executors 클래스는 직접 스레드를 다루는 것은 번거롭기 때문에 ExecutorService 및 ScheduledExecutorService 인스턴스를 생성하여 반환을 도와주는 팩토리 클래스입니다. Executors 메서드 newFixedThreadPool(int) : 고정된 개수의 스레드를 사용하여 동작하며, 공유된 무한 큐를 사용하여 작업을 처리하는 스레드 풀을 생성합니다. 파라미터로 통해 생성된 스레드 개수는 항상 활성화되어 작업을 처리합니다. 모든 스레드가 활성화된 상태에서 추가 작업이 있으면 큐에 대기합니다. 실행 중에 오류로 스레드가 종료되면 새로운 스레드가 생성됩니다. newFixedThreadPool(int, ThreadFactory) : 새 스레드를 생성할 때 ThreadFactor..
ExecutorService 인터페이스는 Executor의 확장된 버전입니다. 스레드의 생명 주기에 대한 메서드가 있어서 스레드 관리를 훨씬 더 편리하게 제공합니다. ExecutorService 메서드 shutdown : 이전에 제출된 작업은 순차적으로 실행되면서 종료됩니다. 새로운 작업은 허용하지 않습니다. 이전에 제출된 작업이 실행은 되지만 완료할 때까지는 기다리지 않습니다. shutdownNow : 이전에 제출된 작업이 실행되지 않고 바로 종료되면서 가지고 있던 작업 목록을 반환합니다. shoutdown과 마찬가지로 실행 중인 작업이 종료될 때까지 기다리지 않습니다. isShutdown : ExecutorService가 shutdown 상태이면 true 아니면 false를 반환합니다. isTermi..
Executor 인터페이스는 명시적으로 스레드를 생성하는 대신에 사용됩니다. 일반적으로 호출자 스레드가 아닌 다른 스레드에서 실행이 됩니다. Executor 인터페이스는 스레드를 관리하고 작업을 스레드에 할당하는 기본적인 인터페이스입니다. Executor는 작업 실행 및 관리를 담당하며, 다양한 작업 큐 및 스레드 풀 구현을 허용하여 애플리케이션에서 비동기적으로 작업을 수행할 수 있게 해줍니다. Executor 기본 예시 public class Main { public static void main(String[] args) { Task task = new Task(); for(int i = 0; i < 10 ; i++) { task.execute(new RunThread()); } } static cl..
스레드 풀의 개념 병렬 처리가 많아지면 스레드의 생성 및 스케줄링에 메모리 사용량이 늘어납니다. 스레드 풀은 다수의 스레드를 미리 생성하여 특정 작업을 수행할 때 이용하는 기법으로, 이를 통해 스레드의 생성 및 스케줄링에 따른 메모리를 줄이고 효율적인 작업 관리를 할 수 있습니다. 이는 다수의 클라이언트 요청이 동시에 들어올 때, 서버에서 각 요청을 스레드로 처리해야 하는 상황에서 특히 중요합니다. 스레드 풀 구성요소 스레드 : 작업을 수행하는 단위 작업 큐 : 스레드 풀로 보내지는 작업들을 저장하는 공간 작업(태스크) : 스레드가 수행해야 될 작업 스레드 풀 동작방식 클라이언트가 작업을 스레드 풀에 제출하면 스레드 풀 작업 큐에 저장됩니다. 스레드 풀 내의 생성된 스레드들이 작업 큐에서 작업을 가져와 ..