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

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java 通過mave命令下載jar包的示例代碼

    Java 通過mave命令下載jar包的示例代碼

    這篇文章主要介紹了Java 通過mave命令下載jar的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java調用groovy實現原理代碼實例

    Java調用groovy實現原理代碼實例

    這篇文章主要介紹了Java調用groovy實現原理代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • MyBatis源碼淺析(一)開篇

    MyBatis源碼淺析(一)開篇

    源碼的學習好處多多,Mybatis源碼量少、邏輯簡單。下面將通過本文給大家詳解,低mybatis源碼淺析感興趣的朋友一起看看吧
    2016-11-11
  • Java格式化輸出詳細講解(printf、print、println、format等)

    Java格式化輸出詳細講解(printf、print、println、format等)

    Java的格式化輸出等同于String.Format,與C有很大的相似,下面這篇文章主要給大家介紹了關于Java格式化輸出(printf、print、println、format等)的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • springdata jpa單表操作crud的實例代碼詳解

    springdata jpa單表操作crud的實例代碼詳解

    這篇文章主要介紹了springdata jpa單表操作crud的實例代碼詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • java單向鏈表的實現實例

    java單向鏈表的實現實例

    java單向鏈表的實現實例。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • IDEA的默認快捷鍵設置與Eclipse的常用快捷鍵的設置方法

    IDEA的默認快捷鍵設置與Eclipse的常用快捷鍵的設置方法

    這篇文章主要介紹了IDEA的默認快捷鍵設置與Eclipse的常用快捷鍵的設置方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java動態(tài)規(guī)劃之丑數問題實例講解

    Java動態(tài)規(guī)劃之丑數問題實例講解

    這篇文章主要介紹了Java動態(tài)規(guī)劃之丑數問題實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • IDEA找不到database圖標的簡單圖文解決方法

    IDEA找不到database圖標的簡單圖文解決方法

    idea是一個功能十分強大的IDE,大家在使用他進行開發(fā)時候,必不可少的就是連接數據庫了,這篇文章主要給大家介紹了關于IDEA找不到database圖標的解決方法,需要的朋友可以參考下
    2024-07-07
  • Java選擇結構與循環(huán)結構的使用詳解

    Java選擇結構與循環(huán)結構的使用詳解

    循環(huán)結構是指在程序中需要反復執(zhí)行某個功能而設置的一種程序結構。它由循環(huán)體中的條件,判斷繼續(xù)執(zhí)行某個功能還是退出循環(huán),選擇結構用于判斷給定的條件,根據判斷的結果判斷某些條件,根據判斷的結果來控制程序的流程
    2022-03-03

最新評論