Java ThreadLocal 学习

时间:2022-04-05 00:18:08

同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式。

而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