java executorservice 예제

Thread 클래스로 작업하는 것은 매우 지루하고 오류가 발생하기 쉽습니다. 이러한 이유로 인해 동시성 API는 2004년에 Java 5가 출시되면서 다시 도입되었습니다. API는 패키지 java.util.concurrent에 있으며 동시 프로그래밍을 처리하기 위한 많은 유용한 클래스를 포함합니다. 그 이후로 동시성 API는 모든 새로운 Java 릴리스로 향상되었으며 심지어 Java 8에서도 동시성을 처리하기위한 새로운 클래스와 방법을 제공합니다. 주어진 예제에서는 두 메서드를 모두 사용하여 Runnable 형식의 작업을 실행하고 있습니다. Java 스레드 풀은 Runnable 스레드의 컬렉션을 관리합니다. 작업자 스레드는 큐에서 Runnable 스레드를 실행합니다. java.util.concurrent.Executors는 java.util.concurrent.Executor 인터페이스에 대한 팩토리 및 지원 메서드를 제공하여 자바의 스레드 풀을 만듭니다. 위의 예제에서는 크기 2의 고정스레드 풀이 있는 실행기 서비스를 만들었습니다. 고정 스레드 풀은 다중 스레드 응용 프로그램에서 자주 사용되는 매우 일반적인 유형의 스레드 풀입니다.

주기적으로 실행되는 작업을 예약하기 위해 실행기는 두 가지 메서드 일정AtFixedRate() 및 스케줄WithFixedDelay()를 제공합니다. 첫 번째 방법은 고정 된 시간 속도 작업을 실행 할 수 있습니다, 예를 들어, 이 예에서 설명 한 바와 같이 매 초마다 한 번 : 감사합니다, invokeAll 예는 정확히 내가 찾고있는 예입니다! 이 예제는 실행 종료와 다음 실행 시작 사이에 1초의 고정 지연으로 작업을 예약합니다. 초기 지연은 0이고 작업 기간은 2초입니다. 따라서 실행 간격이 0, 3초, 6초, 9초 등으로 끝납니다. 보시다시피 스케줄WithFixedDelay()는 예약된 작업의 기간을 예측할 수 없는 경우에 유용합니다. 다음 예제에서는 5초 지연 후 실행되도록 작업을 예약합니다 . 새FixedThreadPool(1)을 사용하여 크기 1의 스레드 풀로 백업되는 실행기 서비스를 만듭니다. 이것은 newSingleThreadExecutor()와 동일하지만 나중에 단순히 하나보다 큰 값을 전달하여 풀 크기를 늘릴 수 있습니다. 작업 제출 및 실행: 실행기 프레임워크는 스레드 풀에서 실행을 위한 작업을 제출하는 메서드를 제공하며 작업이 실행될 시기를 결정할 수 있는 권한도 제공합니다.

예를 들어 지금 실행할 작업을 제출하거나 나중에 실행되도록 예약하거나 주기적으로 실행하도록 할 수 있습니다. 좋습니다! 이제 상황을 더 잘 이해하기 위해 예제를 살펴보겠습니다. 다음 예제에서는 먼저 단일 작업자 스레드를 사용하여 실행기 서비스를 만든 다음 작업자 스레드 내에서 실행할 작업을 제출합니다.