首页 > 代码库 > 一个用Phaser控制多线程协作的小例子
一个用Phaser控制多线程协作的小例子
package com.zl1030.Phaser; import java.util.concurrent.Phaser; public class Bot implements Runnable { private Phaser phaser; private int id; public Bot(int id, Phaser phaser) { super(); this.id = id; this.phaser = phaser; } public void run() { try { for (int i = 0; i < 5; i++) { System.out.println("id:" + id + " wait..."); Thread.sleep((long) (Math.random() * 5000)); System.out.println("id:" + id + " arrive phase: " + phaser.getPhase()); phaser.arriveAndAwaitAdvance(); System.out.println("id:" + id + " after wait"); } } catch (Exception e) { e.printStackTrace(); } } }
package com.zl1030.Phaser; import java.util.Scanner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Phaser; public class Test { public static void main(String... args) throws Exception { Phaser phaser = new Phaser() { @Override protected boolean onAdvance(int phase, int registeredParties) { System.out.println("=====================phase:" + phase + " arrived!============================"); return false; } }; int botNum = 3; phaser.bulkRegister(botNum + 1); ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < botNum; i++) { executorService.execute(new Bot(i + 1, phaser)); } Scanner s = new Scanner(System.in); System.out.println("请输入字符串:"); while (true) { String line = s.nextLine(); if (line.equals("exit")) { System.out.println("Bye!"); System.exit(0); } else { switch (line) { case "add": phaser.bulkRegister(1); botNum += 1; executorService.execute(new Bot(botNum, phaser)); break; case "state": System.out.println("phase: " + phaser.getPhase() + " arrivedParties:" + phaser.getArrivedParties() + "/" + botNum); break; case "continue": phaser.arriveAndAwaitAdvance(); break; } System.out.println(">>>" + line); } } } }
本文出自 “zl1030的记录” 博客,请务必保留此出处http://zl1030.blog.51cto.com/274507/1853846
一个用Phaser控制多线程协作的小例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。