본문 바로가기

Web/Java

[Java] 비동기처리 방법

반응형

[1] ExcutorService

jdk(1.5부터)에서 비동기 작업을 위해서 지원하는 interface이다. 일반적으로 ExcutorService는 작업 할당을 위한 스레드 풀과 API를 제공한다.

ExcutorService

 

[2] future와 callBack

 

1) future

jdk(1.5부터)에서 제공하는 비동기 계산의 결과를 나타내는 Interface이다.

비동기 작업이란 현재 진행하고 있는 스레드가 아닌 별도의 스레드에서 작업을 수행하는 것을 말하는데 같은 스레드에서 메서드를 호출할 때는 결과를 리턴 받을수 있지만, 비동기적으로 수행되는 스레드에서는 결과를 전달받을 수 있는 대상이 필요한데 Future가 그 역할을 한다.

 

비동기 객체리턴

Future 를 통해서 비동기 수행되고 있는 결과값을 가져올 때는 get 메서드를 사용하는데 해당 메서드를 사용하게되면 비동기 작업이 완료될 때 까지 해당 스레드가 blocking된다.

또한, isDone() 메서드를 통하여 해당 연산이 완료되었는지 확인할 수 있다.

 

2) callback

FutureTask의 비동기 작업이 완료될 경우 호출되는 done() 메서드를 재정의를 통해  callback 구현하여 Future와 같이 handler를 이용해서 결과값는것과 마찬가지의 기능을 구현할 수 있다.

즉 callback 관련된 부불을 FutureTask를 상속받아 done() 메서드를 재정의함으로써, 비동기 코드와 그 결과를 가지고 작업을 수행하는 callback을 좀 더 가독성있게 구현가능하다.

 

done 메서드를 재정의한 callback

 

 

 

[3] FutureTask

futureTask클래스는 비동기 작업을 수행할 객체를 생성할때 사용한다.

즉, 비동기 작업 생성과 실행을 동시에 했던 부분에서 비동기 작업 생성과 실행을 분리할수 있다.

 

FutureTask를 이용한 비동기 작업 생성

 

 

반응형

'Web > Java' 카테고리의 다른 글

[JAVA] hasNext() 와 next() 의 차이  (0) 2020.06.09
[Java] JDK14 기능정리  (0) 2020.05.13
[정의] CI / DI  (1) 2020.05.11
Collections emptyMap()을 사용하는 경우  (0) 2020.05.07
[Java] 직렬화  (0) 2020.04.27