DelayQueue 의 실제 사용은 무엇이고, 어떤 일반적인 문제가 해결되도록 설계 되었습니까?
DelayQueue 의 실제 사용은 무엇이고, 어떤 일반적인 문제가 해결되도록 설계 되었습니까?
답변:
이 클래스는 여러 지연된 이벤트를 적절한 순서로 처리하려는 스레드에 적합합니다.
예를 들어 100 개의 깜박이는 표시등이 있고 모든 표시등이 서로 관련없는 다른 속도로 깜박이는 경우를 가정 해보십시오. 각 라이트마다 스레드를 만들거나이 클래스를 사용하여 하나의 스레드 좌표를 만들 수 있습니다. 다음과 같이 작동합니다.
Light
플래시 속도 로 수업을 받다Delayed
빛을 가리키는 인터페이스 의 구현을 만듭니다.LightFlash
DelayQueue
새 LightFlash
조명을 만들고 새 조명을 추가하십시오.DelayQueue는 다음 이벤트 처리를 처리합니다.
내가 생각할 수있는 두 가지 실제 예 :
DelayQueue
아마도 우선 순위 대기열 로 구현 될 것이며 , 일반적으로 힙 으로 가장 잘 구현됩니다 .
지연은 큐 자체가 아닌 큐에있는 요소와 연관됩니다. 큐에 들어가는 일부 오브젝트는 지연이 0 일 수 있지만 일부 오브젝트는 지연이 더 길 수 있습니다.
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Delayed.html
이를 염두에두고 몇 가지 사용 사례를 생각할 수 있습니다. 메시징 흐름과 관련하여 취약하고 코드 냄새가 약간납니다. 특정 상황을 제외하고 모든 대안을 사용합니다.
1) 제어 흐름-주문을 처리하는 데 60 초가 걸리므로 개체가 60 초 이상있을 때까지 다음 번 주문을 읽지 마십시오.
2) 메시지 흐름-요청이 2 개 또는 3 개의 외부 서비스로 전송 된 후 첫 번째 일괄 작업이 완료 될 가능성이 있음 을 알게 된 후 N 초 후에 주문을 처리하기 위해 다음 작업을 릴리스하는 비동기 시스템 .
3) 메시지 일괄 처리-특정 유형의 주문이 폭주 할 수 있으므로 마지막 N 초 동안 수신 된 주문을 처리하지 않도록하여 비슷한 주문이 곧 발생하여 다음 실행시 일괄 처리로 처리 될 수 있는지 확인할 수 있습니다.
4) 메시지 우선 순위-다른 메시지 또는 다른 고객은 지연이 적거나 제로로 약간 높은 서비스 품질을 얻을 수 있습니다.
경우에 따라 대기열에 배치 한 객체는 대기열에서 대기하기 전에 일정 시간 동안 해당 대기열에 있어야합니다. 여기서는 BlockingQueue 인터페이스를 구현하는 java.util.concurrent.DelayQueue 클래스를 사용합니다. DelayQueue를 사용하려면 대기열 오브젝트가 지정된 시간 동안 대기열에 상주해야합니다.
실제 사용 예 는 devx 사이트에서 큐 기사 작성을 참조하십시오.
...이 사실을 설명하려고 생각한 실제 사례는 머핀과 관련이 있습니다. 자, 머핀 객체 (우리가 자바를 말하는 것처럼 커피 찌르는 의도는 없습니다). 머핀 객체를 배치 할 DelayQueue가 있다고 가정 해 봅시다. getDelay 메소드는 본질적으로 객체가 DelayQueue에 유지되는 시간이 얼마나 남아 있는지를 나타냅니다. 이 메소드에 의해 돌려 주어지는 수가 제로 또는 제로보다 작은 경우, 객체는 준비되고 (이 예에서는 소성) 큐에서 제외됩니다.
완전히 요리되지 않은 머핀을 먹고 싶지 않기 때문에 권장 요리 시간 동안 머핀을 DelayQueue에 놓으십시오 ...