ThreadLocalのdemo

1380 ワード

次はコードです.説明しません.
public class SequenceNumber {
	// ① ThreadLocal initialValue() , 
	private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() {
		public Integer initialValue() {
			return 0;
		}
	};

	// ② 
	public int getNextNum() {
		seqNum.set(seqNum.get() + 1);
		return seqNum.get();
	}

	public static void main(String[] args) {
		SequenceNumber sn = new SequenceNumber();
		// ③ 3 sn, 
		TestClient t1 = new TestClient(sn);
		TestClient t2 = new TestClient(sn);
		TestClient t3 = new TestClient(sn);
		t1.start();
		t2.start();
		t3.start();
	}

	private static class TestClient extends Thread {
		private SequenceNumber sn;
		public TestClient(SequenceNumber sn) {
			this.sn = sn;
		}
		public void run() {
			for (int i = 0; i < 3; i++) {// ④ 3 
				System.out.println("thread[" + Thread.currentThread().getName()
						+ "] sn[" + sn.getNextNum() + "]");
			}
		}
	}
}

 
実行結果:
 
thread[Thread-2] sn[1]thread[Thread-2] sn[2]thread[Thread-2] sn[3]thread[Thread-1] sn[1]thread[Thread-1] sn[2]thread[Thread-1] sn[3]thread[Thread-0] sn[1]thread[Thread-0] sn[2]thread[Thread-0] sn[3]