国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

java多線程模擬搶紅包功能

2024-07-13 10:14:31
字體:
來源:轉載
供稿:網友

今天有朋友問我一道面試題,有5個人搶5個紅包,可重復搶,用多線程程序實現,實現方式有多種,分享一下我的思路:應用了阻塞隊列的特性。

/**  * 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<>();     //準備搶紅包     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);//確保搶紅包線程準備就緒     Random random = new Random(100);     //發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 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 左云县| 临沭县| 台前县| 托克逊县| 巴彦县| 东至县| 唐海县| 育儿| 离岛区| 蒙山县| 监利县| 榆树市| 桂阳县| 金沙县| 东乡县| 古田县| 隆林| 汝阳县| 沁源县| 兴和县| 林州市| 绥宁县| 闽清县| 永修县| 苍梧县| 家居| 乌拉特前旗| 宁德市| 乃东县| 上高县| 当涂县| 景宁| 沽源县| 元江| 太仆寺旗| 华蓥市| 岚皋县| 长岭县| 嘉善县| 开化县| 龙游县|