BlockingQueue
은 Runnable
입니다. TaskExecutor
구현 중 하나를 사용하여 모든 작업을 간단하게 실행할 수 있으며 모두 병렬로 실행됩니다. 그러나 일부 Runnable
은 다른 사람에 따라 다르므로 Runnable
이 완료 될 때까지 기다려야한다는 것을 의미하므로 실행될 수 있습니다.Spring TaskExecutor 프레임 워크에서 스레드를 관리하는 방법
규칙은 매우 간단합니다 : 모든 Runnable
코드가 있습니다. 동일한 코드를 가진 두 개의 Runnable
은 동시에 실행할 수 없지만 코드가 다른 경우 병렬로 실행해야합니다. 다른 말로하면, 실행중인 Runnable
은 다른 코드를 가질 필요가 있습니다. 모든 "duplicates"는 기다려야합니다.
문제는 스레드가 종료 될 때 무엇이든지/아무 이벤트/방법이 없습니다 것입니다. 내가 할 수 모든 Runnable
에 같은 통지를 내장,하지만 그냥 스레드 종료하기 전에 수행 할 수 있기 때문에이
java.util.concurrent.ThreadPoolExecutor
종료 방법 afterExecute
을 가지고있어하지 후에 나는이 방법을 좋아하지 않는다, 그러나 그것은 구현 될 필요가 - 봄 기본 구현 만 사용하고이 메서드는 무시됩니다.
Runnable
이 이미 실행 중이므로 (구현시이 정보에 대한 액세스 권한이 부여되지 않음) 2 개의 추가 모음을 추적해야하기 때문에 복잡해집니다. 코드가 중복되어 연기가 지연됩니다. 더 폴링이 없기 때문에
BlockingQueue
접근 방식을 좋아한다. 하지만
Runnable
사이의 종속성을 관리하는 더 좋은 방법이있을 수 있으므로
BlockingQueue
을 포기하고 다른 전략을 사용해야합니까? 떠오르는
나는이 첫 번째 접근법을 좋아하지만, 필요하지 않을 때 ExecutorService가 파괴되면 더 좋을 것입니다. – Marx