装饰性花园,计算不同花园入口的每个入口人数以及所有人数,多线程设计思想,静态域
2014-08-14 11:01
393 查看
package iie.cas.test14; 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 { 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() { // TODO Auto-generated method stub while (!canceled) { synchronized (this) { ++number; } System.out.println(this + " Total:" + count.increment()); try { TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { System.out.print("sleep interrupted!"); } }// while 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 Exception{ 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.MICROSECONDS)) System.out.println("Some tasks were not terminated!"); System.out.println("Total : " + Entrance.getTotalCount()); System.out.println("sum of entrances : " + Entrance.sumEntrances()); } }
相关文章推荐
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- 利用Java中面向对象的思想设计一个计算圆、正方形以及长方形面积的类
- Android应用程序开发以及背后的设计思想深度剖析(2)
- Android应用程序开发以及背后的设计思想深度剖析(2)
- 云计算(cloud computing)让每个单位以及个人都有可能以低成本接触到顶尖 IT 技术
- 设计模式实践-反射到所有接口实现类实践工厂方法,页面中有大量计算数据时设计实践
- 深夜闲聊Java与PHP 以及架构设计思想与最佳实践
- Android应用程序开发以及背后的设计思想深度剖析(4)
- Android应用开发以及设计思想深度剖析(1) 推荐
- Android应用开发以及设计思想深度剖析(1)
- Android应用开发以及设计思想深度剖析(3) 推荐
- 任意输入10个数,计算所有正数的和、负数的和以及10个数的和
- Android应用程序开发以及背后的设计思想深度剖析(3)
- Android应用程序开发以及背后的设计思想深度剖析
- Android应用开发以及设计思想深度剖析(2) 推荐
- dbcached 的故障转移支持、设计方向以及与 Memcachedb 的不同之处
- Getmac返回计算机中所有网卡的媒体访问控制 (MAC) 地址以及每个地址的网络协议列表
- 不显示删除回复显示所有回复显示星级回复显示得分回复 Android多线程设计模式之-wait()和notify()机制
- 黑马程序员——静态导入,可变参数,自动拆箱装箱以及享元设计模式 JDK1.5新特性