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() + "]");
}
}
}
}
分享到:
相关推荐
ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。
ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。
ThreadLocal
理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal
学习ThreadLocal,了解其中的原理,以及学习其中的优点!避免坑点!!
正确理解ThreadLocal.pdf
java 简单的ThreadLocal示例
DbUTils中用ThreadLocal类
ThreadLocal的几种误区ThreadLocal的几种误区ThreadLocal的几种误区
主要介绍ThreadLocal的原理,实例分析以及注意事项
详解java底层实现原理,ThreadLocal底层实现的数据结构,为什么不会导致内存泄露
本例以序列号生成的程序为例,展示ThreadLocal的使用
ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量
JDBC事务的封装和Threadlocal实例,参考博客:http://blog.csdn.net/daijin888888/article/details/50988053
设计模式及ThreadLocal详细讲解资料,想要学习java或者提升自己技术的同学可以下载观看
ThreadLocal源码分析,主要有ThreadLocal源码以及ThreadLocal的内部结构在jdk8前后的变化
Synchronized与ThreadLocal
ThreadLocal的基本原理,核心机制,源码,ThreadLocal在分布式架构中的应用,ThreadLocal在基础架构,开源中间件,使用非常广泛,建议掌握。
ThreadLocal原理及在多层架构中的应用