java中ThreadLocal的认识

原创 2018年04月17日 08:48:08

在java多线程中我们经常看到的保证线程安全的关键字为ThreadLocal、volatile、synchronized三个术语。

    synchronized:

    在以往的开发中无论遇见什么形式的并发访问我最先想到的就是synchronized,synchronized能够保证在并发环境中程序的同步执行,防止并发问题,但是synchronized带来的确实性能的消耗。

    volatile:

    该关键字我没有怎么使用过,从各大论坛我们可以知道volatile保证同一变量在多个线程中保持数据一致性,我个人理解volatile更适合使用在包含信号、开关功能性的开发中。

    ThreadLocal:

    ThreadLocal更像是一种工具,ThreadLocal可以获取到当前线程中保存的数据信息,同一变量在不同线程中含有自己的副本,各线程之间没有任何联系。假如存在两个线程使用到ThreadLocal声明的一个变量,则在这两个线程中会同时存在两个副本,线程可以修改自己的值,不会引起并发修改等问题。

public class ThreadUtils {

//声明一个ThreadLocal 变量(未指定枚举类型,可以存放任意类型的变量)

public static ThreadLocal cutrrentThreadHandler=new ThreadLocal();

public static Object get(){
return cutrrentThreadHandler.get();
}

public static void set(Object o){
cutrrentThreadHandler.set(o);
}

}



public class ThreadTest implements Runnable {



public ThreadTest(int num) {
this.num = num;
}
private int num;
@Override
public void run() {

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String handler=(String)ThreadUtils.get();
if(handler==null){
ThreadUtils.set("Thread"+num);
}
System.out.println(ThreadUtils.get());

ThreadUtils.set(ThreadUtils.get()+"---2222");
System.out.println(ThreadUtils.get());
}


}



public class ThreadLocalTest {


public static void main(String[] args) {
for(int i=0;i<20;i++){
ThreadTest test=new ThreadTest(i);
new Thread(test).start();
}
System.out.println("------");
}

}


在主线程中创建20个子线程ThreadTest ,子线程同时修改ThreadLocal的值,再显示各线程的数据,结果显示线程间没有相互影响。

【java项目实战】ThreadLocal封装Connection,实现同一线程共享资源

线程安全一直是程序猿们关注的焦点,多线程也一直是比较让人头疼的话题,想必大家曾经也遇到过各种各种的问题,我就不再累述了。当然,解决方式也有很多,这篇博文给大家提供一种很好的解决线程安全问题的思路。 。...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014-08-08 08:02:25
  • 9566

关于ThreadLocal的一些认识

可以看到,其是从current这个线程里去获取Values对象的,而如果不存在这个对象,其就会调用initializeValues方法,为线程的localValues创建一个新的Values对象。 最...
  • foolsheep
  • foolsheep
  • 2014-11-07 15:44:19
  • 1186

Java中 ThreadLocal用法 - 个人实用总结

在多线程中同时被使用的类中使用ThreadLocal,能保证每个线程中有一个单独的对象,互不影响。用法如下: 假如A类在多个线程中同时出现了(不管使用的是它的new对象还是用的静态方法),假如需要...
  • qsc0624
  • qsc0624
  • 2015-06-25 09:39:20
  • 791

[JAVA]在Web应用中ThreadLocal的使用

 Web应用中ThreadLocal的使用    1、ThreadLocal是什么:   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Threa...
  • szwangdf
  • szwangdf
  • 2009-11-25 10:12:00
  • 4999

Java学习整理系列之ThreadLocal的理解

在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问...
  • Sup_Heaven
  • Sup_Heaven
  • 2014-06-11 20:30:01
  • 5576

java多线程--深入理解threadlocal以及适用场景

如何使用:       简介: JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编...
  • sean417
  • sean417
  • 2017-04-10 15:51:41
  • 1356

Java并发编程-线程局部变量(ThreadLocal)

ThreadLocal与线程成员变量还有区别,ThreadLocal该类提供了线程局部变量。这个局部变量与一般的成员变量不一样,ThreadLocal的变量在被多个线程使用时候,每个线程只能拿到该变量...
  • chenchaofuck1
  • chenchaofuck1
  • 2016-06-05 14:45:24
  • 1516

java多线程并发控制之ThreadLocal

下面是ThreadLocal的测试代码,更多信息请参考注释 package com.jadyer.thread.local;      import java.util.Rand...
  • maguanghui_2012
  • maguanghui_2012
  • 2017-02-11 11:41:07
  • 1072

java 深入理解ThreadLocal

相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的...
  • mccand1234
  • mccand1234
  • 2017-01-07 13:49:14
  • 1151

深入ThreadLocal的内部机制

早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。Thr...
  • linghu_java
  • linghu_java
  • 2015-01-29 23:04:30
  • 1605
收藏助手
不良信息举报
您举报文章:java中ThreadLocal的认识
举报原因:
原因补充:

(最多只允许输入30个字)