首页 > 代码库 > java多线程之计算数量
java多线程之计算数量
package Thread.Abort; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; //计数类 class Count {//DATA private int count = 0; private Random rand = new Random(47); // public synchronized int increment() { int temp = count; if (rand.nextBoolean()) Thread.yield(); return (count = ++temp); } public synchronized int value() { return count; } } //动作类 class Entrance implements Runnable { private static Count count = new Count(); private static List<Entrance> entrances = new ArrayList<Entrance>(); private int number = 0; private final int id; private static volatile boolean canceled = false; public static void cancel() { canceled = true; } public Entrance(int id) { this.id = id; entrances.add(this); } @Override public void run() { while (!canceled) { synchronized (this) { ++number; } System.out.println(this + " Total:" + count.increment());//要显示的数值都要通过同步方法读取才准确 try { TimeUnit.MICROSECONDS.sleep(100); } catch (Exception e) { System.out.println("sleep interrupted"); } } System.out.println("Stopping " + this); } public synchronized int getValue() { return number; } public String toString() { return "Entrance " + id + ": " + getValue(); } public static int getTotalCount() { return count.value(); } public static int sumEntrances() { int sum = 0; for (Entrance entrance : entrances) { sum += entrance.getValue(); } return sum; } } public class OrnamentalGarden { public static void main(String[] args) throws InterruptedException { ExecutorService exec = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { exec.execute(new Entrance(i)); } TimeUnit.SECONDS.sleep(3); Entrance.cancel(); exec.shutdown(); if (!exec.awaitTermination(250, TimeUnit.MILLISECONDS)) System.out.println("Some tasks were not terminated!"); System.out.println("Total:" + Entrance.getTotalCount()); System.out.println("Sum of Entrances:" + Entrance.sumEntrances()); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。