/**
* 读书笔记:
*
* 如果对象是非线程安全的,在多线程环境下,对对象的访问必须使用synchronized进行同步,但是这样就降低了并发性,影响系统的性能,
* ThreadLocal 是线程的一个本地化变量,它为每个线程分配一个独立的变量副本。增加了内存的使用。
*
* 线程同步机制保证了同一时间只有一个线程访问变量。
*
* 对于多线程资源共享,同步机制采用了"以时间换空间"的方式:访问串行化,对象共享化
*
* ThreadLocal采用了"以空间换时间"的方式:访问并行化,对象独享化。
* @author rome
*/
public class SequenceNumber {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
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 ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){
@Override
protected Integer initialValue() {
// TODO Auto-generated method stub
return 0;
}
};
public int getNextNum(){
seqNum.set(seqNum.get()+1);
return seqNum.get();
}
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()+"]");
}
}
}
}
ThreadLocal与多线程
最新推荐文章于 2024-01-24 19:32:28 发布