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

java多線程模擬搶紅包功能

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

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

/** 
 * 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個(gè)紅包 
  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 + 
    '}'; 
 } 
} 

運(yùn)行效果:

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 

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

相關(guān)文章

  • SpringBoot 整合Tess4J庫(kù)實(shí)現(xiàn)圖片文字識(shí)別案例詳解

    SpringBoot 整合Tess4J庫(kù)實(shí)現(xiàn)圖片文字識(shí)別案例詳解

    Tess4J是一個(gè)基于Tesseract OCR引擎的Java接口,可以用來(lái)識(shí)別圖像中的文本,說(shuō)白了,就是封裝了它的API,讓Java可以直接調(diào)用,今天給大家分享一個(gè)SpringBoot整合Tess4j庫(kù)實(shí)現(xiàn)圖片文字識(shí)別的小案例
    2023-10-10
  • linux中java獲取路徑的實(shí)例代碼

    linux中java獲取路徑的實(shí)例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于linux中java獲取路徑的實(shí)例代碼以及相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • 關(guān)于@Controller和@Restcontroller的那點(diǎn)奇葩事

    關(guān)于@Controller和@Restcontroller的那點(diǎn)奇葩事

    這篇文章主要介紹了關(guān)于@Controller和@Restcontroller的那點(diǎn)奇葩事,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java之使用stream對(duì)日期排序方式

    java之使用stream對(duì)日期排序方式

    這篇文章主要介紹了java之使用stream對(duì)日期排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 淺析Java和Scala中的Future

    淺析Java和Scala中的Future

    這篇文章主要介紹了Java和Scala中的Future的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • Java Swing JFrame窗口的實(shí)現(xiàn)

    Java Swing JFrame窗口的實(shí)現(xiàn)

    這篇文章主要介紹了Java Swing JFrame窗口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Springboot注解之@EnableAutoConfiguration詳解

    Springboot注解之@EnableAutoConfiguration詳解

    這篇文章主要介紹了Springboot注解之@EnableAutoConfiguration詳解,@EnableAutoConfiguration是一個(gè)加載Starter目錄包之外的需要Spring自動(dòng)生成bean對(duì)象,本文對(duì)其進(jìn)行總結(jié),需要的朋友可以參考下
    2023-08-08
  • apache commons工具集代碼詳解

    apache commons工具集代碼詳解

    這篇文章主要介紹了apache commons工具集代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • java 排序算法之歸并排序

    java 排序算法之歸并排序

    本文主要講解了排序算法中的歸并排序,文中運(yùn)用大量的圖片和代碼講解的非常詳細(xì),感興趣的朋友可以學(xué)習(xí)一下這篇文章,相信可以幫助到你
    2021-09-09
  • Spring-boot 2.3.x源碼基于Gradle編譯過(guò)程詳解

    Spring-boot 2.3.x源碼基于Gradle編譯過(guò)程詳解

    這篇文章主要介紹了Spring-boot 2.3.x源碼基于Gradle編譯過(guò)程詳解,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論

平江县| 即墨市| 肥乡县| 永州市| 红原县| 临湘市| 漳平市| 读书| 林甸县| 保德县| 仙桃市| 会昌县| 盘山县| 漳州市| 手机| 保德县| 九江市| 安陆市| 孝义市| 延庆县| 景宁| 灵璧县| 秦皇岛市| 镶黄旗| 镇远县| 页游| 泽普县| 房产| 玛多县| 南漳县| 梁山县| 诏安县| 紫云| 视频| 布尔津县| 河曲县| 德令哈市| 合阳县| 堆龙德庆县| 康定县| 旌德县|