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

Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例

 更新時(shí)間:2023年12月13日 10:32:39   作者:Terisadeng  
這篇文章主要介紹了Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例,DelayQueue是一個(gè)延遲隊(duì)列,插入隊(duì)列的數(shù)據(jù)只有達(dá)到設(shè)置的延遲時(shí)間時(shí)才能被取出,否則線(xiàn)程會(huì)被阻塞,插入隊(duì)列的對(duì)象必須實(shí)現(xiàn)Delayed接口,需要的朋友可以參考下

DelayQueue延遲隊(duì)列代碼實(shí)例

DelayQueue是一個(gè)延遲隊(duì)列,插入隊(duì)列的數(shù)據(jù)只有達(dá)到設(shè)置的延遲時(shí)間時(shí)才能被取出,否則線(xiàn)程會(huì)被阻塞。

插入隊(duì)列的對(duì)象必須實(shí)現(xiàn)Delayed接口,實(shí)現(xiàn)comapreTo方法和getDelay方法,其中g(shù)etDelay方法用于設(shè)置對(duì)象延遲多少秒取出,compareTo用于對(duì)被延遲取出的數(shù)據(jù)進(jìn)行排序

所以compareTo方法中一般調(diào)用對(duì)象的getDelay方法,根據(jù)對(duì)象的延遲時(shí)間進(jìn)行排序。

首先是定義實(shí)現(xiàn)Delayed接口的類(lèi):

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
 * 實(shí)現(xiàn)Delayed接口,用于插入延遲阻塞隊(duì)列
 * @author SN
 *
 */
public class Worker implements Delayed{
	private String name;
	private String workNo;
	private long startTime;
	private long endTime;
	public static final TimeUnit TIME_UNIT=TimeUnit.SECONDS;
	public Worker(String name,String workNo,long startTime,long endTime){
		this.name=name;
		this.workNo=workNo;
		this.startTime=startTime;
		this.endTime=endTime;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getWorkNo() {
		return workNo;
	}
	public void setWorkNo(String workNo) {
		this.workNo = workNo;
	}
	public long getStartTime() {
		return startTime;
	}
	public void setStartTime(long startTime) {
		this.startTime = startTime;
	}
	public long getEndTime() {
		return endTime;
	}
	public void setEndTime(long endTime) {
		this.endTime = endTime;
	}
	//排序方法,用于將插入隊(duì)列的對(duì)象按延遲時(shí)間進(jìn)行排序
	@Override
	public int compareTo(Delayed delayed) {
		Worker worker=(Worker) delayed;
		return (this.getDelay(TIME_UNIT)-worker.getDelay(TIME_UNIT))>0?1:0;
	}
	//延遲時(shí)間,用于確定取出隊(duì)列中數(shù)據(jù)的時(shí)間
	@Override
	public long getDelay(TimeUnit unit) {
		return endTime-System.currentTimeMillis();
	}
}

然后是測(cè)試向DelayQueue插入數(shù)據(jù)和取出數(shù)據(jù):

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.concurrent.DelayQueue;
/**
 * 向延遲隊(duì)列中插入數(shù)據(jù),并在到達(dá)延遲時(shí)間時(shí)從隊(duì)列中取出數(shù)據(jù),否則就阻塞當(dāng)前線(xiàn)程
 * @author SN
 *
 */
public class DelayQueueExp implements Runnable{
	private DelayQueue<Worker> queue=new DelayQueue<>();
	public boolean working=true;
	public static final SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	//向延遲隊(duì)列中插入數(shù)據(jù),并設(shè)置延遲取出的時(shí)間
	public void startWork(String name,String workNo,int grade){
		long time=System.currentTimeMillis();
		Date date=new Date(time);
		Worker worker=new Worker(name, workNo, System.currentTimeMillis(), grade*10000+time);
		System.out.println("員工"+worker.getName()+",工號(hào)"+worker.getWorkNo()+"于"+sdf.format(date)+"打卡上班...");
		this.queue.add(worker);
	}
	public void endWork(Worker worker){
		Date date=new Date(worker.getEndTime());
		System.out.println("員工"+worker.getName()+",工號(hào)"+worker.getWorkNo()+"于"+sdf.format(date)+"打卡下班...");
	}
	@Override
	public void run() {
		while (working) {
			try {
				//啟動(dòng)線(xiàn)程后,從延遲隊(duì)列中取出數(shù)據(jù),如果沒(méi)有滿(mǎn)足延遲時(shí)間條件的數(shù)據(jù)可以取出就阻塞住線(xiàn)程
				Worker worker=queue.take();
				endWork(worker);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		System.out.println("員工開(kāi)始打卡上班...");
		DelayQueueExp company=new DelayQueueExp();
		Thread work=new Thread(company);
		work.start();
		//向延遲隊(duì)列中插入數(shù)據(jù)
		company.startWork("zhangsan", "1001", 1);
		company.startWork("lisi", "1002", 3);
		company.startWork("wanger", "1003", 5);
	}
}

到此這篇關(guān)于Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例的文章就介紹到這了,更多相關(guān)DelayQueue延遲隊(duì)列代碼實(shí)例內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文秒懂?kafka?HA(高可用)

    一文秒懂?kafka?HA(高可用)

    這篇文章主要介紹了秒懂?kafka?HA(高可用)的相關(guān)知識(shí),本文我們來(lái)說(shuō)一說(shuō)和?kafka?高可用相關(guān)的一些策略,對(duì)kafka?HA相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-11-11
  • 關(guān)于Spring 中 StringUtils.isEmpty 被棄用如何正確使用

    關(guān)于Spring 中 StringUtils.isEmpty 被棄用如何正確使用

    SpringBoot/SpringFramework升級(jí)后,StringUtils.isEmpty()方法已被棄用,推薦使用hasLength和hasText替代,hasLength判斷是否有長(zhǎng)度,hasText判斷是否包含至少一個(gè)非空白字符,本文給大家介紹關(guān)于Spring 中 StringUtils.isEmpty 被棄用如何正確使用,感興趣的朋友一起看看吧
    2026-01-01
  • springboot對(duì)接第三方微信授權(quán)及獲取用戶(hù)的頭像和昵稱(chēng)等等

    springboot對(duì)接第三方微信授權(quán)及獲取用戶(hù)的頭像和昵稱(chēng)等等

    這篇文章主要介紹了springboot對(duì)接第三方微信授權(quán)及獲取用戶(hù)的頭像和昵稱(chēng)等等,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Spring整合Mybatis思路梳理總結(jié)

    Spring整合Mybatis思路梳理總結(jié)

    MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作,本篇文章帶你了解Spring整合Mybatis的思路
    2022-02-02
  • java編譯時(shí)出現(xiàn)使用了未經(jīng)檢查或不安全的操作解決方法

    java編譯時(shí)出現(xiàn)使用了未經(jīng)檢查或不安全的操作解決方法

    這篇文章主要介紹了java編譯時(shí)出現(xiàn)使用了未經(jīng)檢查或不安全的操作的解決方法,需要的朋友可以參考下
    2014-03-03
  • Maven引入本地Jar包并打包進(jìn)War包中的方法

    Maven引入本地Jar包并打包進(jìn)War包中的方法

    本篇文章主要介紹了Maven引入本地Jar包并打包進(jìn)War包中的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • java實(shí)現(xiàn)小型局域網(wǎng)群聊功能(C/S模式)

    java實(shí)現(xiàn)小型局域網(wǎng)群聊功能(C/S模式)

    這篇文章主要介紹了java利用TCP協(xié)議實(shí)現(xiàn)小型局域網(wǎng)群聊功能(C/S模式) ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 深入剖析Java中的synchronized關(guān)鍵字

    深入剖析Java中的synchronized關(guān)鍵字

    在 Java 程序中,我們可以利用 synchronized 關(guān)鍵字來(lái)對(duì)程序進(jìn)行加鎖,它既可以用來(lái)聲明一個(gè) synchronized 代碼塊,也可以直接標(biāo)記靜態(tài)方法或者實(shí)例方法,本文就帶大家深入了解Java中的synchronized關(guān)鍵字,感興趣的同學(xué)可以參考閱讀
    2023-06-06
  • JAVA反射機(jī)制實(shí)例詳解

    JAVA反射機(jī)制實(shí)例詳解

    這篇文章主要介紹了JAVA反射機(jī)制,以實(shí)例形式較為詳細(xì)的分析講解了Java反射機(jī)制的具體概念、功能與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • spring實(shí)現(xiàn)bean對(duì)象創(chuàng)建代碼詳解

    spring實(shí)現(xiàn)bean對(duì)象創(chuàng)建代碼詳解

    這篇文章主要介紹了spring實(shí)現(xiàn)bean對(duì)象創(chuàng)建代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12

最新評(píng)論

易门县| 梅州市| 司法| 高碑店市| 建瓯市| 洪湖市| 许昌县| 社旗县| 拉萨市| 京山县| 桐柏县| 青神县| 富锦市| 黔西县| 扎鲁特旗| 鄂温| 辉南县| 平果县| 沈阳市| 余干县| 曲周县| 临清市| 南皮县| 喀喇沁旗| 罗田县| 延长县| 临安市| 德庆县| 遂溪县| 甘孜县| 嘉黎县| 婺源县| 化隆| 万盛区| 宝清县| 阿克陶县| 霞浦县| 盐源县| 辽源市| 桐柏县| 洞口县|