同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式。
而ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源(变量),这样当然不需要对多个线程进行同步了
所以ThreadLocal并不能替代同步机制,两者面向的问题领域不同。
如果你需要进行多个线程之间进行通信,则使用同步机制;如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal
ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
线程类
public class TestClient extends Thread { private SequenceNumber sn; public TestClient(SequenceNumber sn) { this.sn = sn; } @Override public void run() { for(int i =0;i<3;i++) { System.out.println(Thread.currentThread().getName()+" "+sn.getNextNum()); } } }
测试类
public class SequenceNumber { 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(); TestClient t1 = new TestClient(sn); TestClient t2 = new TestClient(sn); TestClient t3 = new TestClient(sn); t1.start(); t2.start(); t3.start(); } }参考资料:http://www.blogjava.net/Ericzhang5231/articles/JavaThreadlocal.html