[리팩토링] ExecutorService 에서 execute 과 submit 은 각각 어떤 경우 사용해야될까?

반환타입의 차이점

  1. EXECUTE()
    1. void 가 반환타입입니다.
    1. 해당 메서드는 어떤 결과를 반환하는 것이 아니기에, 이후에 상황에 대한 검증이 어렵습니다
  1. Submit()
    1. Future 가 반환타입입니다.
    1. 해당 메서드는 어떤 결과가 발생했는지 반환타입으로 받을 수 있기에, 상화에 대한 검증이 쉽습니다.

작업 중의 예외처리에 관하여

  1. Execute()
    1. 작업이 실패하는 경우 그냥 에러가 발생하고 작업이 멈추게 됩니다.
      1. 스레드에서 UncaughtExceptionHandler 발생함
  1. Submit()
    1. 작업이 실패해도 Future 객체에 해당 예외 등의 관련한 정보가 일단 담기게 됩니다.
    • 이후 Future.get() 을 수행하게 된다면 그때 예외가 발생한다고 합니다.

어떨 때 각자 사용하면 되느냐?

  • submit 의 경우
    • 서비스 로직 등을 수행한 뒤에 어떤 작업이 성공했고, 에러가 발생한지 별도로 검증이 필요한 경우 사용
  • execute 의 경우
    • 서비스 로직 등을 수행 한위에 어떤 검증이 필요하지 않은 경우 사용한다.


Uploaded by N2T