日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

delay在java中有什么用_DelayQueue怎么在Java多线程并发开发中使用

發(fā)布時(shí)間:2025/3/15 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 delay在java中有什么用_DelayQueue怎么在Java多线程并发开发中使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DelayQueue怎么在Java多線程并發(fā)開(kāi)發(fā)中使用

發(fā)布時(shí)間:2020-12-05 17:29:31

來(lái)源:億速云

閱讀:56

作者:Leah

這篇文章給大家介紹DelayQueue怎么在Java多線程并發(fā)開(kāi)發(fā)中使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

Delayed,一種混合風(fēng)格的接口,用來(lái)標(biāo)記那些應(yīng)該在給定延遲時(shí)間之后執(zhí)行的對(duì)象。此接口的實(shí)現(xiàn)必須定義一個(gè) compareTo 方法,該方法提供與此接口的 getDelay 方法一致的排序。

在網(wǎng)上看到了一些示例,發(fā)現(xiàn)有的示例存在一些問(wèn)題,做了些修改,希望能幫助大家理解。

中國(guó)人都喜歡K歌,大部分人的內(nèi)心都住著一個(gè)歌手的夢(mèng),尤其是學(xué)生時(shí)代,大家都喜歡組團(tuán)去KTV唱歌,一唱一下午,大家都唱得很爽。話說(shuō)又到了一年一度的雙11,許多的單身狗開(kāi)始組團(tuán)來(lái)到KTV唱歌。那么KTV這個(gè)時(shí)候如何通過(guò)程序來(lái)收費(fèi)記時(shí)的呢,模擬的代碼如下:

public class KTV implements Runnable{

private DelayQueue queue = new DelayQueue<>();

public void begin(String name,String boxNum,int money){

KTVConsumer man = new KTVConsumer(name,boxNum,20l*money+System.currentTimeMillis());

System.out.println(man.getName()+" 等人交了"+money+"元錢,進(jìn)入"+man.getBoxNum()+"號(hào)包廂,開(kāi)始K歌...");

this.queue.add(man);

}

public void end(KTVConsumer man){

System.out.println(man.getName()+" 等人所在的"+man.getBoxNum()+"號(hào)包廂,時(shí)間到...");

}

@Override

public void run() {

// TODO Auto-generated method stub

while(true){

try {

KTVConsumer man = queue.take();

end(man);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public static void main(String args[]){

try{

System.out.println("KTV正常營(yíng)業(yè)");

System.out.println("================================");

KTV ktv = new KTV();

Thread sing = new Thread(ktv);

sing.start();

new Thread(new Runnable() {

@Override

public void run() {

ktv.begin("張三", "111", 500);

}

}).start();

new Thread(new Runnable() {

@Override

public void run() {

ktv.begin("李四", "666", 200);

}

}).start();

Thread.sleep(2000);

new Thread(new Runnable() {

@Override

public void run() {

ktv.begin("王五", "888", 100);

System.out.println("================================");

}

}).start();

}

catch(Exception ex){

}

}

}

public class KTVConsumer implements Delayed{

private String name;

//截止時(shí)間

private long endTime;

//包廂號(hào)

private String boxNum;

public KTVConsumer(String name,String boxNum,long endTime){

this.name=name;

this.boxNum=boxNum;

this.endTime=endTime;

}

public String getName(){

return this.name;

}

public String getBoxNum(){

return this.boxNum;

}

/**

* 用來(lái)判斷是否到了截止時(shí)間

*/

@Override

public long getDelay(TimeUnit unit) {

// TODO Auto-generated method stub

return unit.convert(endTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);

}

/**

* 相互比較排序用

*/

@Override

public int compareTo(Delayed o) {

// TODO Auto-generated method stub

if(o == null || ! (o instanceof KTVConsumer)) return 1;

if(o == this) return 0;

KTVConsumer s = (KTVConsumer)o;

return endTime - s.endTime > 0 ? 1 :(endTime - s.endTime == 0 ? 0 : -1);

}

}

運(yùn)行的結(jié)果如下:

KTV正常營(yíng)業(yè)

================================

張三 等人交了500元錢,進(jìn)入111號(hào)包廂,開(kāi)始K歌...

李四 等人交了200元錢,進(jìn)入666號(hào)包廂,開(kāi)始K歌...

王五 等人交了100元錢,進(jìn)入888號(hào)包廂,開(kāi)始K歌...

================================

李四 等人所在的666號(hào)包廂,時(shí)間到...

王五 等人所在的888號(hào)包廂,時(shí)間到...

張三 等人所在的111號(hào)包廂,時(shí)間到...

關(guān)于DelayQueue怎么在Java多線程并發(fā)開(kāi)發(fā)中使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

總結(jié)

以上是生活随笔為你收集整理的delay在java中有什么用_DelayQueue怎么在Java多线程并发开发中使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。