欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java利用DelayQueue實現(xiàn)延遲任務(wù)代碼實例

 更新時間:2023年12月08日 10:39:56   作者:陳先森嗎  
這篇文章主要介紹了Java利用DelayQueue實現(xiàn)延遲任務(wù)代碼實例,DelayQueue?是一個支持延時獲取元素的阻塞隊列,?內(nèi)部采用優(yōu)先隊列?PriorityQueue?存儲元素,同時元素必須實現(xiàn)?Delayed?接口,需要的朋友可以參考下

DelayQueue實現(xiàn)延遲任務(wù)

JDK自帶DelayQueue 是一個支持延時獲取元素的阻塞隊列, 內(nèi)部采用優(yōu)先隊列 PriorityQueue 存儲元素,同時元素必須實現(xiàn) Delayed 接口;

在創(chuàng)建元素時可以指定多久才可以從隊列中獲取當前元素,只有在延遲期滿時才能從隊列中提取元素。

在這里插入圖片描述

DelayQueue屬于排序隊列,它的特殊之處在于隊列的元素必須實現(xiàn)Delayed接口,該接口需要實現(xiàn)compareTo和getDelay方法。

getDelay方法:獲取元素在隊列中的剩余時間,只有當剩余時間為0時元素才可以出隊列。

compareTo方法:用于排序,確定元素出隊列的順序。

實現(xiàn)方法:

1:在測試包jdk下創(chuàng)建延遲任務(wù)元素對象DelayedTask,實現(xiàn)compareTo和getDelay方法;

2:在main方法中創(chuàng)建DelayQueue并向延遲隊列中添加三個延遲任務(wù);

3:循環(huán)的從延遲隊列中拉取任務(wù)。

package com.dack.test;
import java.util.Calendar;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class DelayedTask implements Delayed {
	public static DelayQueue<DelayedTask> queue;
	// 任務(wù)的執(zhí)行時間
	private int executeTime = 0;
	// 業(yè)務(wù)需要的參數(shù)
	private String outStr = "";
	public static void main(String[] args) {
		DelayedTask.queue = new DelayQueue<DelayedTask>();
		// 可有可無
		DelayedTask.queue.add(new DelayedTask(2, "hello"));
		System.out.println(System.currentTimeMillis() + "服務(wù)啟動");
		while (true) {
			DelayedTask delayedTask = DelayedTask.queue.poll();
			if (delayedTask != null) {
				String os = delayedTask.getOutStr();
				//可以隨時添加新的延時任務(wù)
				DelayedTask.queue.add(new DelayedTask(2, "hello"));
				System.out.println(System.currentTimeMillis() + " 消費服務(wù) ,傳參" + os);
			}
		}
	}
	public DelayedTask(int delay) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.SECOND, delay);
		this.executeTime = (int) (calendar.getTimeInMillis());
	}
	// 業(yè)務(wù)所需的參數(shù)構(gòu)造方法
	public DelayedTask(int delay, String str) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.SECOND, delay);
		this.executeTime = (int) (calendar.getTimeInMillis());
		this.outStr = str;
	}
	/**
	 * 元素在隊列中的剩余時間
	 * 
	 * @param unit
	 * @return
	 */
	@Override
	public long getDelay(TimeUnit unit) {
		Calendar calendar = Calendar.getInstance();
		return executeTime - (calendar.getTimeInMillis());
	}
	/**
	 * 元素排序
	 * 
	 * @param o
	 * @return
	 */
	@Override
	public int compareTo(Delayed o) {
		long val = this.getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS);
		return val == 0 ? 0 : (val < 0 ? -1 : 1);
	}
	public int getExecuteTime() {
		return executeTime;
	}
	public void setExecuteTime(int executeTime) {
		this.executeTime = executeTime;
	}
	public String getOutStr() {
		return outStr;
	}
	public void setOutStr(String outStr) {
		this.outStr = outStr;
	}
}

到此這篇關(guān)于Java利用DelayQueue實現(xiàn)延遲任務(wù)代碼實例的文章就介紹到這了,更多相關(guān)Java的DelayQueue實現(xiàn)延遲任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot集成redis lettuce

    springboot集成redis lettuce

    目前java操作redis的客戶端有jedis跟Lettuce。本文主要介紹了springboot集成redis lettuce,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java怎么獲取當前時間、計算程序運行時間源碼詳解(超詳細!)

    Java怎么獲取當前時間、計算程序運行時間源碼詳解(超詳細!)

    有的時候,我們需要查看某一段代碼的性能如何,最為簡單的方式,可以通過計算該段代碼執(zhí)行的耗時,來進行簡單的判斷,這篇文章主要給大家介紹了關(guān)于Java怎么獲取當前時間、計算程序運行時間的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • SpringBoot集成整合JWT與Shiro流程詳解

    SpringBoot集成整合JWT與Shiro流程詳解

    安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會出現(xiàn)問題,這篇文章主要介紹了SpringBoot集成JWT、Shiro框架的使用
    2022-12-12
  • JPA中@CreatedDate和@LastModifiedDate的使用方式

    JPA中@CreatedDate和@LastModifiedDate的使用方式

    這篇文章主要介紹了JPA中@CreatedDate和@LastModifiedDate的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java使用Swing實現(xiàn)一個模擬電腦計算器

    Java使用Swing實現(xiàn)一個模擬電腦計算器

    Java Swing 是一個用于創(chuàng)建 Java GUI(圖形用戶界面)的框架,它提供了一系列的 GUI 組件和工具,可以用于創(chuàng)建桌面應(yīng)用程序,包括按鈕、文本框、標簽、表格等等,本文給大家介紹了Java使用Swing實現(xiàn)一個模擬計算器,感興趣的同學可以自己動手嘗試一下
    2024-05-05
  • java中vector與hashtable操作實例分享

    java中vector與hashtable操作實例分享

    java中vector與hashtable操作實例,有需要的朋友可以參考一下
    2014-01-01
  • Java使用quartz實現(xiàn)定時任務(wù)示例詳解

    Java使用quartz實現(xiàn)定時任務(wù)示例詳解

    這篇文章主要為大家介紹了Java使用quartz實現(xiàn)定時任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • springboot加載復(fù)雜的yml文件獲取不到值的解決方案

    springboot加載復(fù)雜的yml文件獲取不到值的解決方案

    這篇文章主要介紹了springboot加載復(fù)雜的yml文件獲取不到值的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java字節(jié)緩沖流原理與用法詳解

    Java字節(jié)緩沖流原理與用法詳解

    這篇文章主要介紹了Java字節(jié)緩沖流原理與用法,結(jié)合實例形式總結(jié)分析了java字節(jié)流與緩沖區(qū)相關(guān)原理與操作技巧,需要的朋友可以參考下
    2019-09-09
  • Java 8新特性 內(nèi)建函數(shù)式接口詳解

    Java 8新特性 內(nèi)建函數(shù)式接口詳解

    這篇文章主要介紹了Java 8新特性 內(nèi)建函數(shù)式接口詳解的相關(guān)資料,這里主要介紹4個基本函數(shù)式接口,需要的朋友可以參考下
    2016-12-12

最新評論