最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • Java+Selenium實現(xiàn)控制瀏覽器的啟動選項Options

    Java+Selenium實現(xiàn)控制瀏覽器的啟動選項Options

    這篇文章主要為大家詳細介紹了如何使用java代碼利用selenium控制瀏覽器的啟動選項Options的代碼操作,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-01-01
  • Java飛行記錄器JFR功能實現(xiàn)過程圖解

    Java飛行記錄器JFR功能實現(xiàn)過程圖解

    這篇文章主要介紹了Java飛行記錄器JFR功能實現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • MyBatis中SqlSession生命周期的使用

    MyBatis中SqlSession生命周期的使用

    SqlSession是MyBatis的核心接口之一,本文主要介紹了MyBatis中SqlSession生命周期的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 踩坑Debug啟動失敗,無報錯信息問題

    踩坑Debug啟動失敗,無報錯信息問題

    在進行項目debug時遇到了無法啟動的問題,項目一直處于正在啟動狀態(tài),但未出現(xiàn)任何報錯信息,分析原因可能是存在不合法的斷點位置,即斷點未打在方法內(nèi)部,解決方法是檢查所有斷點信息,并移除非法斷點,之后項目能夠正常啟動
    2023-02-02
  • 詳解SpringBoot可執(zhí)行Jar包運行原理

    詳解SpringBoot可執(zhí)行Jar包運行原理

    SpringBoot有一個很方便的功能就是可以將應(yīng)用打成可執(zhí)行的Jar,那么大家有沒想過這個Jar是怎么運行起來的呢,本篇博客就來介紹下 SpringBoot可執(zhí)行Jar包的運行原理,需要的朋友可以參考下
    2023-05-05
  • springSecurity使用實戰(zhàn)指南

    springSecurity使用實戰(zhàn)指南

    本文系統(tǒng)講解了Spring Security的核心功能,包括實戰(zhàn)舉例,本文結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • java實現(xiàn)簡單的給sql語句賦值的示例

    java實現(xiàn)簡單的給sql語句賦值的示例

    這篇文章主要介紹了java實現(xiàn)簡單的給sql語句賦值的示例,需要的朋友可以參考下
    2014-05-05
  • SpringBoot中yml的數(shù)據(jù)綁定示例

    SpringBoot中yml的數(shù)據(jù)綁定示例

    本文主要介紹了SpringBoot中yml的數(shù)據(jù)綁定示例,借助于YAML的簡潔語法和結(jié)構(gòu)化特性,我們能夠輕松地管理應(yīng)用程序的配置信息,使得配置文件更加清晰易讀,感興趣的可以了解一下
    2023-11-11
  • SpringBoot詳細講解異步任務(wù)如何獲取HttpServletRequest

    SpringBoot詳細講解異步任務(wù)如何獲取HttpServletRequest

    在使用框架日常開發(fā)中需要在controller中進行一些異步操作減少請求時間,但是發(fā)現(xiàn)在使用@Anysc注解后會出現(xiàn)Request對象無法獲取的情況,本文就此情況給出完整的解決方案
    2022-04-04
  • 創(chuàng)建自定義的Java注解類的方法

    創(chuàng)建自定義的Java注解類的方法

    這篇文章主要介紹了創(chuàng)建自定義的Java注解類的方法,主要部分為創(chuàng)建一個帶有Java類型@interface的新類型,需要的朋友可以參考下
    2015-07-07

最新評論

大埔区| 醴陵市| 井陉县| 九龙县| 搜索| 双峰县| 辛集市| 大化| 旌德县| 博白县| 巩留县| 武邑县| 互助| 泉州市| 蒙阴县| 蓬安县| 凉山| 正镶白旗| 九寨沟县| 荥阳市| 洛隆县| 新田县| 阿拉善盟| 板桥市| 通州区| 澄迈县| 盖州市| 鄂托克前旗| 健康| 普洱| 鱼台县| 嘉峪关市| 林周县| 肥西县| 涟水县| 尚志市| 台湾省| 德化县| 北海市| 沐川县| 伽师县|