자바 에서 Delay Queue 인 스 턴 스 용법 상세 설명
3622 단어 자바DelayQueue
1.개념
지연 시간 이 있 는 무한 차단 대기 열 입 니 다.대기 열 에 있 는 요 소 는 지연 시간 이 되 어야 만 꺼 낼 수 있 습 니 다.이 대기 열 은 보통 만 료 된 데이터 의 삭제 나 작업 스케줄 링 에 사 용 됩 니 다.다음은 정 해진 데이터 삭 제 를 모 의 해 보 겠 습 니 다.
2.특징
(1)경계 없 는 디자인
(2)추가(put)차단 하지 않 음,차단 제거
(3)요 소 는 모두 만 료 시간 이 있다.
(4)원 소 를 꺼 내 는 것 은 기한 이 지난 것 만 꺼 낼 수 있다.
3.실례
DelayQueue 대기 열 요 소 를 넣 을 때마다 Delayed 인 터 페 이 스 를 실현 해 야 합 니 다.다음은 DelayObject 클래스 를 만 듭 니 다.인 스 턴 스 대상 은 DelayQueue 에 들 어 갑 니 다.그 구조 함 수 는 문자열 형식 데이터 와 밀리초 지연 변 수 를 포함한다.
public class DelayObject implements Delayed {
private String data;
private long startTime;
public DelayObject(String data, long delayInMilliseconds) {
this.data = data;
this.startTime = System.currentTimeMillis() + delayInMilliseconds;
}
Delay Queue 의 응용 인 스 턴 스
package org.dromara.hmily.demo.springcloud.account.service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* @description:
* @author: hh
*/
public class DelayedQueneTest {
public static void main(String[] args) throws InterruptedException {
Item item1 = new Item("item1", 5, TimeUnit.SECONDS);
Item item2 = new Item("item2",10, TimeUnit.SECONDS);
Item item3 = new Item("item3",15, TimeUnit.SECONDS);
DelayQueue<Item> queue = new DelayQueue<>();
queue.put(item1);
queue.put(item2);
queue.put(item3);
System.out.println("begin time:" + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
for (int i = 0; i < 3; i++) {
Item take = queue.take();
System.out.format("name:{%s}, time:{%s}
",take.name, LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
}
}
}
class Item implements Delayed{
/* */
private long time;
String name;
public Item(String name, long time, TimeUnit unit) {
this.name = name;
this.time = System.currentTimeMillis() + (time > 0? unit.toMillis(time): 0);
}
@Override
public long getDelay(TimeUnit unit) {
return time - System.currentTimeMillis();
}
@Override
public int compareTo(Delayed o) {
Item item = (Item) o;
long diff = this.time - item.time;
if (diff <= 0) {// >=
return -1;
}else {
return 1;
}
}
@Override
public String toString() {
return "Item{" +
"time=" + time +
", name='" + name + '\'' +
'}';
}
}
실행 결과:5 초 마다 하나씩 꺼 내기
begin time:2019-05-31T11:58:24.445
name:{item1}, time:{2019-05-31T11:58:29.262}
name:{item2}, time:{2019-05-31T11:58:34.262}
name:{item3}, time:{2019-05-31T11:58:39.262}
자바 의 Delay Queue 인 스 턴 스 용법 에 대한 자세 한 설명 은 여기까지 입 니 다.자바 의 Delay Queue 가 어떤 내용 인지 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.