1.ThreadLocal类

ThreadLocal是Thread Local Variable的简称,意思是线程局部变量。作用是为每一个使用该变量的线程都提供一个该变量的副本,使每一个线程都能独立操作这个副本而不会与其他线程的副本冲突。

ThreadLocal在java.lang包下,是从jdk1.2就有的类,在jdk5.0之后加入了泛型支持。常用的方法也就三个:

T get():返回此线程局部变量中当前线程副本的值

set(T value):设置此线程局部变量中当前线程副本的值

remove():删除此线程局部变量中当前线程副本

ThreadLocal和其他所有的同步机制一样,都是为了解决多个线程对同一变量的访问冲突。

在普通的同步机制中,是通过对象加锁来实现多个线程对同一变量的安全访问的,该变量是多个线程共享的,系统并没有将这份资源复制多份,只是采用了安全机制来控制对这份资源的访问而已。

而ThreadLocal将需要并发访问的资源复制多份,每个线程拥有自己的资源副本,从而也就没有必要对该变量进行同步了。

2.线程安全的类

以Concurrent开头的集合类,都在java.util.concurrent包下,这种集合类采用更复杂的算法来保证永远不会锁住整个集合(并发写入时加锁,读取时不加锁),因此在并发写入时有较好的性能。最常用的是ConcurrentHashMap

ConcurrentHashMap在默认情况下最多支持16个线程并发写入,如果没有设置,则超过16个线程并发向该Map中写入数据时,可能会有一些线程需要等待,可以在创建ConcurrentHashMap实例时调用某个带参构造器显式指定。

以CopyOnWrite开头的集合类,也在java.util.concurrent包下,最常用的是CopyOnWriteArrayList、CopyOnWriteArraySet

ThreadLocal类及常用的线程安全类探究的更多相关文章

  1. ThreadLocal类使用说明

      ThreadLocal类用于创建一个线程本地变量   在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是threadLo ...

  2. java中ThreadLocal类的详细介绍(详解)

    ThreadLocal简介 变量值的共享可以使用public static的形式,所有线程都使用同一个变量,如果想实现每一个线程都有自己的共享变量该如何实现呢?JDK中的ThreadLocal类正是为 ...

  3. 线程变量---ThreadLocal类

    用处:保存线程的独立变量.对一个线程类(继承自Thread) 思想:如果一个资源会引起线程竞争,那就为每一个线程配置一个资源.相比于synchronized是一种空间换时间的策略 当使用ThreadL ...

  4. 用ThreadLocal类实现线程安全的正确姿势

    大家通常知道,ThreadLocal类可以帮助我们实现线程的安全性,这个类能使线程中的某个值与保存值的对象关联起来.ThreadLocal提供了get与set等访问接口或方法,这些方法为每个使用该变量 ...

  5. Java线程与并发库高级应用-线程范围内共享数据ThreadLocal类

    1.线程范围内共享变量 1.1 前奏: 使用一个Map来实现线程范围内共享变量 public class ThreadScopeShareData { static Map<Thread, In ...

  6. 线程系列5--java中的ThreadLocal类实现线程范围内的数据共享(二)

    ThreadLocal类可以理解成一个类似与map集合使用,以当前线程当做key 来使用,将线程氛围内需要共享的数据当做value,形成键值对的形式使用.ThreadLocal和线程同步机制都是为了解 ...

  7. 深入理解java:2.4. 线程本地变量 java.lang.ThreadLocal类

    ThreadLocal,很多人都叫它做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多. 可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那样每个线程可以访问自己内 ...

  8. ThreadLocal类详解:原理、源码、用法

    以下是本文目录: 1.从数据库连接探究 ThreadLocal 2.剖析 ThreadLocal 源码 3. ThreadLocal 应用场景 4. 通过面试题理解 ThreadLocal 1.从数据 ...

  9. ThreadLocal类详解

    学习一个东西首先要知道为什么要引入它,就是我们能用它来干什么.所以我们先来看看ThreadLocal对我们到底有什么用,然后再来看看它的实现原理. ThreadLocal如果单纯从名字上来看像是“本地 ...

随机推荐

  1. Mysql表名区分大小写

    mysql数据库在windows服务器上表名和字段名均不区分大小写, 但在linux服务器上表名默认是区分大小写的,可在/etc/my.cnf文件中的[mysqld]下面加上一条配置 lower_ca ...

  2. bug记录_document.defaultview.getcomputedstyle()

    页面中使用document.defaultview.getcomputedstyle()在火狐下取不到值. 原本方法现在$(document).ready()中,换到window.onload里就可以 ...

  3. Arch最小化安装X

    Xorg xorg-server 安装xorg-server pacman -S xorg-server 可选:xorg-server-utils pacman -S xorg-server-util ...

  4. 在 iOS 应用中直接跳转到 AppStore 的方法

      找到应用程序的描述链接,在itunes中找到相应的应用,(如下图),点击免费右边的下方向键,选择复制链接,就拿到了对应的app的描述链接 比如:https://itunes.apple.com/c ...

  5. 在textarea的内容后面增加内容

    document.getElementById("result").value+=data+"\n>"; 本文为本人用来记录自己做的一些东西,如有不对的地 ...

  6. android Handler vs Timer

    Handler vs Timer 在我们Android开发过程中,经常需要执行一些短周期的定时任务,这时候有两个选择Timer或者Handler.然而个人认为: Handler 在多个方面比Timer ...

  7. oracle11g 卸载和安装(win7,32位)

    完全卸载oracle11g步骤:1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.2. 开始->程序->Oracle - OraDb11 ...

  8. kindle使用参考

    转载链接:http://blog.sina.com.cn/nuanfengjia 今天买的kindle499刚刚到货了,体验略差,还有一个就是无按键,完全不会玩,只能自己慢慢摸索了. [新Kindle ...

  9. hdu 1020

    //自信满满地交上去~~but...超时了 #include <iostream> #include <string.h> #include <stdio.h> u ...

  10. Cake

    Cake Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...