`

ThreadLocal2

阅读更多
public class SequenceNumber {

	private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() {

		public Integer initialValue() {
			
			/*
			 * 对每一个线程来说这里都是new Integer(1000),是不同的对象
			 * 这样才做到ThreadLocal每个线程保存自己的变量
			 */
			return 1000;  // -128 to  127 有缓存的
			

		}

	};

	public int getNextNum() {
		Integer a = seqNum.get();
		seqNum.set(seqNum.get() + 0);
		/*
		 * +1可以看到各个线程产生的各自产生数字
		 */
		//seqNum.set(seqNum.get() + 1);  
		//全部都是false
		System.out.println(a==seqNum.get());//false
		return seqNum.get();

	}

	public static void main(String[] args)

	{

		SequenceNumber sn = new SequenceNumber();

		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++) {

				System.out.println("thread[" + Thread.currentThread().getName()
						+

						"] sn[" + sn.getNextNum() + "]");

			}

		}

	}

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics