您的位置:首页 > 其它

装饰性花园,计算不同花园入口的每个入口人数以及所有人数,多线程设计思想,静态域

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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐