该类提供勒线程局部变量。这些变量不同与它们的普通对应物,因为访问一个变量(通过其get 或 set方法)的每个线程都是有自己的局部变量,它独立与变量的初始化副本。ThreadLocal实例通常是类中的私有静态字段,他们希望将状态与某一个线程(例如,用户ID或事务ID)相关联。
以上为书中内容,有点难懂。我理解为,案例一中定义的一个普通变量被所有线程所共享。而案例二中以ThreadLocal定义的变量则只存在与每一个单独线程
例 1.
package com.mz.xx.tb;
public class SerialNum1 {
private static int serialNum = 0;
public static int get(){
return serialNum++;
}
public static void main(String[] args) {
new Thread(new MyThread1()).start();
new Thread(new MyThread1()).start();
new Thread(new MyThread1()).start();
}
}
class MyThread1 implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
long tno = Thread.currentThread().getId();
System.out.println(tno + ":" +SerialNum1.get());
System.out.println(tno + ":" +SerialNum1.get());
}
}
- 控制台
8:0
8:1
9:2
9:3
10:4
10:5
例 2.
package com.mz.xx.tb;
public class SerialNum {
private static ThreadLocal<Integer> serialNum = new ThreadLocal<Integer>();
public static int get(){
int value = 0;
if(serialNum.get()!=null){
value = ((Integer)(serialNum.get())).intValue();
}
serialNum.set(++value);
return value - 1;
}
public static void main(String[] args) {
new Thread(new MyThread()).start();
new Thread(new MyThread()).start();
new Thread(new MyThread()).start();
}
}
class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
long tno = Thread.currentThread().getId();
System.out.println(tno + ":" +SerialNum.get());
System.out.println(tno + ":" +SerialNum.get());
}
}
- 控制台
8:0
8:1
9:0
9:1
10:0
10:1
分享到:
相关推荐
深入研究java.lang.ThreadLocal类。ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是 threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。
Java中ThreadLocal工具类(解决多线程程序中并发问题的一种新思路,主要为参数的拷贝问题),感兴趣的话可以查看博文,博文地址:http://blog.csdn.net/otengyue/article/details/38459327
NULL 博文链接:https://justsee.iteye.com/blog/791919
DbUTils中用ThreadLocal类
入研究java.lang.ThreadLocal类.docx
简单分析Java线程编程中ThreadLocal类的使用共4页.pdf.zip
ThreadLocalMap是ThreadLocal类中的内部类,实例却被Thread类持有,相当于每个线程持有一个map
利用过滤器去获取request和response,进行将其设置到ThreadLocal从而保证我的请求的安装线,这样就能在java普通类中获取request和response
JDBC事务的封装和Threadlocal实例,参考博客:http://blog.csdn.net/daijin888888/article/details/50988053
ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个Thread,而是Thread的局部变量
主要介绍了Java ThreadLocal类应用,结合具体案例形式分析了java ThreadLocal类的功能、原理、用法及相关操作注意事项,需要的朋友可以参考下
什么是ThreadLocal?顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突...
ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量
ThreadLocal 是 Java 中的一个类,它提供了一个简单的方式来在每个线程中存储变量,并且能够确保这些变量之间不受影响。下面是对 ThreadLocal 的简单理解。 一、背景 最近有人问我 ThreadLocal 是如何做到在每个...
ThreadLocal 是 Java 中一个非常重要的类,它为解决多线程程序的并发问题提供了一种新的思路。ThreadLocal 并不是一个 Thread,而是 Thread 的局部变量,它为每个使用该变量的线程提供独立的变量副本,所以每一个...
ThreadLocal 并不是 Java 的新发明,而是一个变相地通过 ThreadLocal 的类提供支持的解决方案。 ThreadLocal 类中的方法包括: * void set(T value):将此线程局部变量的当前线程副本中的值设置为指定值。 * void ...
主要介绍了快速了解Java中ThreadLocal类,介绍了ThreadLocal 是什么,ThreadLocal的作用,ThreadLocal 原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
主要介绍了实例讲解Java并发编程之ThreadLocal类,本文给出了模拟ThreadLocal、实用ThreadLocal等代码实例,需要的朋友可以参考下
ThreadLocal,直译为“线程本地”或“本地线程”,如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVariable(线程局部变量)才对,真不理解为什么当初 ...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。