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

Java的DelayQueue延遲隊列簡單使用代碼實例

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

DelayQueue延遲隊列代碼實例

DelayQueue是一個延遲隊列,插入隊列的數據只有達到設置的延遲時間時才能被取出,否則線程會被阻塞。

插入隊列的對象必須實現Delayed接口,實現comapreTo方法和getDelay方法,其中getDelay方法用于設置對象延遲多少秒取出,compareTo用于對被延遲取出的數據進行排序

所以compareTo方法中一般調用對象的getDelay方法,根據對象的延遲時間進行排序。

首先是定義實現Delayed接口的類:

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
 * 實現Delayed接口,用于插入延遲阻塞隊列
 * @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;
	}
	//排序方法,用于將插入隊列的對象按延遲時間進行排序
	@Override
	public int compareTo(Delayed delayed) {
		Worker worker=(Worker) delayed;
		return (this.getDelay(TIME_UNIT)-worker.getDelay(TIME_UNIT))>0?1:0;
	}
	//延遲時間,用于確定取出隊列中數據的時間
	@Override
	public long getDelay(TimeUnit unit) {
		return endTime-System.currentTimeMillis();
	}
}

然后是測試向DelayQueue插入數據和取出數據:

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.concurrent.DelayQueue;
/**
 * 向延遲隊列中插入數據,并在到達延遲時間時從隊列中取出數據,否則就阻塞當前線程
 * @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");
	//向延遲隊列中插入數據,并設置延遲取出的時間
	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()+",工號"+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()+",工號"+worker.getWorkNo()+"于"+sdf.format(date)+"打卡下班...");
	}
	@Override
	public void run() {
		while (working) {
			try {
				//啟動線程后,從延遲隊列中取出數據,如果沒有滿足延遲時間條件的數據可以取出就阻塞住線程
				Worker worker=queue.take();
				endWork(worker);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		System.out.println("員工開始打卡上班...");
		DelayQueueExp company=new DelayQueueExp();
		Thread work=new Thread(company);
		work.start();
		//向延遲隊列中插入數據
		company.startWork("zhangsan", "1001", 1);
		company.startWork("lisi", "1002", 3);
		company.startWork("wanger", "1003", 5);
	}
}

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

相關文章

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

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

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

    關于Spring 中 StringUtils.isEmpty 被棄用如何正確使用

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

    springboot對接第三方微信授權及獲取用戶的頭像和昵稱等等

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

    Spring整合Mybatis思路梳理總結

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

    java編譯時出現使用了未經檢查或不安全的操作解決方法

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

    Maven引入本地Jar包并打包進War包中的方法

    本篇文章主要介紹了Maven引入本地Jar包并打包進War包中的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • java實現小型局域網群聊功能(C/S模式)

    java實現小型局域網群聊功能(C/S模式)

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

    深入剖析Java中的synchronized關鍵字

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

    JAVA反射機制實例詳解

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

    spring實現bean對象創(chuàng)建代碼詳解

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

最新評論

重庆市| 永寿县| 明溪县| 宁强县| 莎车县| 蓬溪县| 绥棱县| 平山县| 任丘市| 紫云| 江山市| 温州市| 津市市| 兖州市| 莲花县| 巴林右旗| 汉寿县| 龙川县| 兴化市| 三江| 乡城县| 怀远县| 务川| 三亚市| 包头市| 谢通门县| 石首市| 邮箱| 沙坪坝区| 乳山市| 易门县| 德惠市| 建始县| 米脂县| 明水县| 深圳市| 都兰县| 房产| 永年县| 遂川县| 漳州市|