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

java多線程模擬搶紅包功能

 更新時間:2020年09月25日 08:25:16   作者:淘金者05012  
這篇文章主要為大家詳細介紹了java多線程模擬搶紅包功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天有朋友問我一道面試題,有5個人搶5個紅包,可重復(fù)搶,用多線程程序?qū)崿F(xiàn),實現(xiàn)方式有多種,分享一下我的思路:應(yīng)用了阻塞隊列的特性。

/** 
 * Created by zhanglinqiang on 2016/6/23. 
 */ 
public class MyTest { 
 
 public static void main(String[] args) throws InterruptedException { 
  LinkedBlockingQueue<LuckyMoney> luckyMoneys = new LinkedBlockingQueue<>(); 
  List<FutureTask> futureTasks = new ArrayList<>(); 
  //準(zhǔn)備搶紅包 
  for (int i = 0; i < 5; i++) { 
   FutureTask<Object> futureTask = new FutureTask<>(new CatchLuckMoney(luckyMoneys, "name" + i), null); 
   new Thread(futureTask,"name"+i).start(); 
   futureTasks.add(futureTask); 
  } 
  Thread.sleep(5);//確保搶紅包線程準(zhǔn)備就緒 
  Random random = new Random(100); 
  //發(fā)5個紅包 
  for (int i = 0; i < 5; i++) { 
   luckyMoneys.put(new LuckyMoney("紅包"+i, random.nextInt(100)+1)); 
  } 
  //等到紅包搶完 
  while (!luckyMoneys.isEmpty()){ 
   Thread.sleep(1); 
  } 
  //終止搶紅包線程 
  for (FutureTask futureTask : futureTasks) { 
   futureTask.cancel(true); 
  } 
 
 } 
} 
 
class CatchLuckMoney implements Runnable { 
 
 public CatchLuckMoney(LinkedBlockingQueue<LuckyMoney> luckyMoneys, String name) { 
  this.luckyMoneys = luckyMoneys; 
  this.name = name; 
 } 
 
 private LinkedBlockingQueue<LuckyMoney> luckyMoneys; 
 private String name; 
 
 @Override 
 public void run() { 
  while (!Thread.currentThread().isInterrupted()) { 
   LuckyMoney redPackage = null; 
   try { 
    redPackage = luckyMoneys.take(); 
   } catch (InterruptedException e) { 
//    e.printStackTrace(); 
    break; 
   } 
   System.out.println(name + "搶到了-->" + redPackage); 
   luckyMoneys.remove(redPackage); 
  } 
  System.out.println("end>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+Thread.currentThread().getName()); 
 } 
} 
 
class LuckyMoney { 
 
 public LuckyMoney(String name, Integer money) { 
  this.name = name; 
  this.money = money; 
 } 
 
 private String name; 
 private Integer money; 
 
 @Override 
 public String toString() { 
  return "LuckyMoney{" + 
    "name='" + name + '\'' + 
    ", money=" + money + 
    '}'; 
 } 
} 

運行效果:

Connected to the target VM, address: '127.0.0.1:8869', transport: 'socket' 
name3搶到了-->LuckyMoney{name='紅包0', money=16} 
name4搶到了-->LuckyMoney{name='紅包3', money=89} 
name0搶到了-->LuckyMoney{name='紅包2', money=75} 
name1搶到了-->LuckyMoney{name='紅包1', money=51} 
name3搶到了-->LuckyMoney{name='紅包4', money=92} 
end>>>>>>>>>>>>>>>>>>>>>>>>>>>>name0 
end>>>>>>>>>>>>>>>>>>>>>>>>>>>>name4 
end>>>>>>>>>>>>>>>>>>>>>>>>>>>>name3 
Disconnected from the target VM, address: '127.0.0.1:8869', transport: 'socket' 
end>>>>>>>>>>>>>>>>>>>>>>>>>>>>name1 
end>>>>>>>>>>>>>>>>>>>>>>>>>>>>name2 
 
Process finished with exit code 0 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaWeb學(xué)習(xí)筆記之Filter和Listener

    JavaWeb學(xué)習(xí)筆記之Filter和Listener

    這篇文章主要給大家介紹了關(guān)于JavaWeb學(xué)習(xí)筆記之Filter和Listener的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Spark內(nèi)存調(diào)優(yōu)指南

    Spark內(nèi)存調(diào)優(yōu)指南

    這篇文章主要為大家介紹了Spark內(nèi)存調(diào)優(yōu)指南數(shù)據(jù)序列化分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Java多線程基本概念以及避坑指南

    Java多線程基本概念以及避坑指南

    多線程之于進程的理解,可以類比多進程之于操作系統(tǒng),多線程指在單個程序中可以同時運行多個不同的線程執(zhí)行不同的任務(wù),這篇文章主要給大家介紹了關(guān)于Java多線程基本概念以及避坑指南的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進行參數(shù)驗證

    Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進行參數(shù)驗證

    在后端開發(fā)中,參數(shù)校驗是非常普遍的,下面這篇文章主要給大家介紹了關(guān)于Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進行參數(shù)驗證的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • Java深入了解數(shù)據(jù)結(jié)構(gòu)中常見的排序算法

    Java深入了解數(shù)據(jù)結(jié)構(gòu)中常見的排序算法

    這篇文章主要介紹了Java常用的排序算法及代碼實現(xiàn),在Java開發(fā)中,對排序的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時候能夠有扎實的基礎(chǔ)能力。那Java有哪些排序算法呢?本文小編就來詳細說說Java常見的排序算法,需要的朋友可以參考一下
    2022-01-01
  • JavaGUI實現(xiàn)隨機單詞答題游戲

    JavaGUI實現(xiàn)隨機單詞答題游戲

    這篇文章主要為大家詳細介紹了JavaGUI實現(xiàn)隨機單詞答題游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • IDEA 中創(chuàng)建SpringBoot 父子模塊的實現(xiàn)

    IDEA 中創(chuàng)建SpringBoot 父子模塊的實現(xiàn)

    這篇文章主要介紹了IDEA 中創(chuàng)建SpringBoot 父子模塊的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 這么優(yōu)雅的Java ORM沒見過吧!

    這么優(yōu)雅的Java ORM沒見過吧!

    這篇文章主要介紹了Java ORM的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • SpringBoot中使用MyBatis-Plus實現(xiàn)分頁接口的詳細教程

    SpringBoot中使用MyBatis-Plus實現(xiàn)分頁接口的詳細教程

    MyBatis-Plus是一個MyBatis的增強工具,在MyBatis的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,在SpringBoot項目中使用MyBatis-Plus可以大大簡化分頁邏輯的編寫,本文將介紹如何在 SpringBoot項目中使用MyBatis-Plus實現(xiàn)分頁接口
    2024-03-03
  • springboot 設(shè)置server.port不生效的原因及解決

    springboot 設(shè)置server.port不生效的原因及解決

    這篇文章主要介紹了springboot 設(shè)置server.port不生效的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論