同步示例1

package com.xiangyang.ex2;

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() {
		while(!canceled){
			synchronized(this){
				++number;
			}
			System.out.println(this + " Total: " + count.increment());
			try {
				TimeUnit.MILLISECONDS.sleep(100);
			} catch (InterruptedException 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 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.MILLISECONDS)){
			System.out.println("Some tasks were not terminated!");
		}
		System.out.println("Total: " + Entrance.getTotalCount());
		System.out.println("Sum of Entrances: " + Entrance.sumEntrances());
	}
}

结果如下

Entrance 1: 1 Total: 1
Entrance 0: 1 Total: 2
Entrance 2: 1 Total: 3
Entrance 4: 1 Total: 4
Entrance 3: 1 Total: 5
Entrance 0: 2 Total: 6
Entrance 2: 2 Total: 7
Entrance 3: 2 Total: 8
Entrance 4: 2 Total: 9
Entrance 1: 2 Total: 10
Entrance 0: 3 Total: 11
Entrance 2: 3 Total: 12
Entrance 3: 3 Total: 13
Entrance 4: 3 Total: 14
Entrance 1: 3 Total: 15
Entrance 0: 4 Total: 16
Entrance 2: 4 Total: 17
Entrance 3: 4 Total: 18
Entrance 4: 4 Total: 19
Entrance 1: 4 Total: 20
Entrance 0: 5 Total: 21
Entrance 2: 5 Total: 22
Entrance 3: 5 Total: 24
Entrance 4: 5 Total: 23
Entrance 1: 5 Total: 25
Entrance 2: 6 Total: 26
Entrance 4: 6 Total: 29
Entrance 3: 6 Total: 28
Entrance 0: 6 Total: 27
Entrance 1: 6 Total: 30
Entrance 4: 7 Total: 32
Entrance 0: 7 Total: 31
Entrance 3: 7 Total: 33
Entrance 2: 7 Total: 34
Entrance 1: 7 Total: 35
Entrance 4: 8 Total: 37
Entrance 3: 8 Total: 36
Entrance 0: 8 Total: 38
Entrance 2: 8 Total: 39
Entrance 1: 8 Total: 40
Entrance 4: 9 Total: 41
Entrance 3: 9 Total: 42
Entrance 0: 9 Total: 43
Entrance 2: 9 Total: 44
Entrance 1: 9 Total: 45
Entrance 4: 10 Total: 46
Entrance 0: 10 Total: 48
Entrance 3: 10 Total: 47
Entrance 2: 10 Total: 49
Entrance 1: 10 Total: 50
Entrance 4: 11 Total: 51
Entrance 3: 11 Total: 52
Entrance 0: 11 Total: 53
Entrance 2: 11 Total: 54
Entrance 1: 11 Total: 55
Entrance 0: 12 Total: 56
Entrance 4: 12 Total: 58
Entrance 3: 12 Total: 57
Entrance 2: 12 Total: 59
Entrance 1: 12 Total: 60
Entrance 4: 13 Total: 61
Entrance 0: 13 Total: 63
Entrance 3: 13 Total: 62
Entrance 2: 13 Total: 64
Entrance 1: 13 Total: 65
Entrance 0: 14 Total: 66
Entrance 4: 14 Total: 68
Entrance 3: 14 Total: 67
Entrance 2: 14 Total: 69
Entrance 1: 14 Total: 70
Entrance 4: 15 Total: 71
Entrance 3: 15 Total: 72
Entrance 0: 15 Total: 73
Entrance 2: 15 Total: 74
Entrance 1: 15 Total: 75
Entrance 4: 16 Total: 76
Entrance 3: 16 Total: 77
Entrance 0: 16 Total: 78
Entrance 2: 16 Total: 79
Entrance 1: 16 Total: 80
Entrance 4: 17 Total: 81
Entrance 3: 17 Total: 82
Entrance 0: 17 Total: 83
Entrance 2: 17 Total: 84
Entrance 1: 17 Total: 85
Entrance 4: 18 Total: 86
Entrance 3: 18 Total: 87
Entrance 0: 18 Total: 88
Entrance 2: 18 Total: 89
Entrance 1: 18 Total: 90
Entrance 4: 19 Total: 91
Entrance 0: 19 Total: 92
Entrance 3: 19 Total: 93
Entrance 2: 19 Total: 94
Entrance 1: 19 Total: 95
Entrance 4: 20 Total: 96
Entrance 0: 20 Total: 97
Entrance 3: 20 Total: 98
Entrance 2: 20 Total: 99
Entrance 1: 20 Total: 100
Entrance 4: 21 Total: 101
Entrance 3: 21 Total: 103
Entrance 0: 21 Total: 102
Entrance 2: 21 Total: 104
Entrance 1: 21 Total: 105
Entrance 4: 22 Total: 106
Entrance 3: 22 Total: 107
Entrance 0: 22 Total: 108
Entrance 2: 22 Total: 109
Entrance 1: 22 Total: 110
Entrance 4: 23 Total: 111
Entrance 3: 23 Total: 112
Entrance 0: 23 Total: 113
Entrance 2: 23 Total: 114
Entrance 1: 23 Total: 115
Entrance 4: 24 Total: 116
Entrance 0: 24 Total: 118
Entrance 3: 24 Total: 117
Entrance 2: 24 Total: 119
Entrance 1: 24 Total: 120
Entrance 4: 25 Total: 121
Entrance 0: 25 Total: 122
Entrance 3: 25 Total: 123
Entrance 2: 25 Total: 124
Entrance 1: 25 Total: 125
Entrance 4: 26 Total: 126
Entrance 3: 26 Total: 128
Entrance 0: 26 Total: 127
Entrance 2: 26 Total: 129
Entrance 1: 26 Total: 130
Entrance 4: 27 Total: 131
Entrance 0: 27 Total: 132
Entrance 3: 27 Total: 133
Entrance 2: 27 Total: 134
Entrance 1: 27 Total: 135
Entrance 4: 28 Total: 136
Entrance 3: 28 Total: 137
Entrance 0: 28 Total: 138
Entrance 2: 28 Total: 139
Entrance 1: 28 Total: 140
Entrance 4: 29 Total: 141
Entrance 0: 29 Total: 142
Entrance 3: 29 Total: 143
Entrance 2: 29 Total: 144
Entrance 1: 29 Total: 145
Entrance 4: 30 Total: 146
Entrance 3: 30 Total: 147
Entrance 0: 30 Total: 148
Entrance 2: 30 Total: 149
Entrance 1: 30 Total: 150
Stopping Entrance 4: 30
Stopping Entrance 3: 30
Stopping Entrance 0: 30
Stopping Entrance 2: 30
Stopping Entrance 1: 30
Total: 150
Sum of Entrances: 150

猜你喜欢

转载自blog.csdn.net/xy87940020/article/details/80860197