java的ThreadLocal类的使用方法,ThreadLocal是一个支持泛型的类,用在多线程中用于防止并发冲突问题。

比如以下的一个样例,就是用于线程添加1,可是相互不冲突

package com.test.threadlocal;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; class Local
{
private static ThreadLocal<Integer> num=new ThreadLocal<Integer>()
{
protected synchronized Integer initialValue()
{
return 1;
}
}; public static void add()
{
num.set(num.get()+1);
}
public static int get()
{
return num.get();
}
} class SelfThread extends Thread
{
public void run()
{
for(int i=0;i<1000;i++)
{
System.out.println(this.getName()+" "+Local.get());
this.yield();
Local.add();
}
}
}
public class MyThreadLocal { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService exec=Executors.newCachedThreadPool();
for(int i=0;i<5;i++)
{
exec.execute(new SelfThread());
} exec.shutdown();
} }

输出结果

Thread-3  973

Thread-1  808

Thread-3  974

Thread-1  809

Thread-3  975

Thread-1  810

Thread-3  976

Thread-1  811

Thread-3  977

Thread-1  812

Thread-3  978

Thread-1  813

Thread-3  979

Thread-1  814

Thread-3  980

Thread-1  815

Thread-3  981

Thread-1  816

Thread-3  982

Thread-1  817

Thread-3  983

Thread-1  818

Thread-3  984

Thread-1  819

Thread-3  985

Thread-1  820

Thread-3  986

Thread-1  821

Thread-3  987

Thread-1  822

Thread-3  988

Thread-1  823

Thread-3  989

Thread-1  824

Thread-3  990

Thread-1  825

Thread-3  991

Thread-1  826

Thread-3  992

Thread-1  827

Thread-3  993

Thread-1  828

Thread-3  994

Thread-1  829

Thread-3  995

Thread-1  830

Thread-3  996

Thread-1  831

Thread-3  997

Thread-1  832

Thread-3  998

Thread-1  833

Thread-3  999

Thread-1  834

Thread-3  1000

Thread-1  835

Thread-1  836

Thread-1  837

Thread-1  838

Thread-1  839

Thread-1  840

Thread-1  841

Thread-1  842

Thread-1  843

Thread-1  844

Thread-1  845

Thread-1  846

Thread-1  847

Thread-1  848

Thread-1  849

Thread-1  850

Thread-1  851

Thread-1  852

Thread-1  853

Thread-1  854

Thread-1  855

Thread-1  856

Thread-1  857

Thread-1  858

Thread-1  859

Thread-1  860

Thread-1  861

Thread-1  862

Thread-1  863

Thread-1  864

Thread-1  865

Thread-1  866

Thread-1  867

Thread-1  868

Thread-1  869

Thread-1  870

Thread-1  871

Thread-1  872

Thread-1  873

Thread-1  874

我们发现。线程会相互切换,可是每一个线程都保持了添加1的顺序,说明没有线程之间的相互干扰。

java的ThreadLocal类的使用方法的更多相关文章

  1. 深入研究java.lang.ThreadLocal类 (转)

    深入研究java.lang.ThreadLocal类     一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thr ...

  2. Java多线程——ThreadLocal类的原理和使用

    Java多线程——ThreadLocal类的原理和使用 摘要:本文主要学习了ThreadLocal类的原理和使用. 概述 是什么 ThreadLocal可以用来维护一个变量,提供了一个ThreadLo ...

  3. java.lang.String 类的所有方法

    java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...

  4. Java中主类中定义方法加static和不加static的区别

     Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...

  5. Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能

    Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...

  6. 深入研究java.lang.ThreadLocal类(转)

    引用:http://lavasoft.blog.51cto.com/62575/51926/ 一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并 ...

  7. 深入研究java.lang.ThreadLocal类

        一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许 ...

  8. Java多线程——ThreadLocal类

    一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名 ...

  9. java.lang.ThreadLocal类

    一.概述        ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量).也 ...

随机推荐

  1. python之模块4

    1 模块与包 1.1 模块的定义 什么是模块 模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 为什么使用模块 在退出python解释器然后重新进入,之前定义的函数 ...

  2. Linux之nginx反向代理+三台web+nfs共享存储实现集群配置

    作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...

  3. Vmware下mint os的安装

    在vmware 11中,mint倒是很好安装.直接读取iso文件,会自动进入一个类似WindowsPE的安装系统,直接双击开始安装就好,比较傻瓜化. 但是安装好了,字体太小,看着很不舒服,于是就倒腾V ...

  4. jQuery 学习04——遍历:定义、向上、向下、同级、过滤

    Query 遍历,意为"移动",用于根据其相对于其他元素的关系来"查找"(或选取)HTML 元素. 以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止 ...

  5. C# 获取字符串字节长度

    一.C# 获取字符串字节长度 1.在C# 语言中使用string 字符串Unicode 编码 2.在C#语言中常用汉字 占 3个字节 方式1:使用默认编码类获取字节长度 Console.WriteLi ...

  6. 理解Docker镜像分层

    关于base镜像 base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 所以,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker ...

  7. Linux系统下分析内存使用情况的管理工具

    有许多办法可以获得Linux系统上所安装内存的信息,并查看其中有多少内存正在使用中.有的命令会展示大量的细节,而有的命令则提供了简洁(但不一定容易理解)的结果.在这篇文章中将介绍一些更有用的工具,帮助 ...

  8. jvm理论-字节码指令案例

    案例1 public class Demo { public int calc(){ int a=100; int b=200; int c=300; return(a+b)*c; } public ...

  9. P2P贷款全攻略,贷前、贷中、贷后工作事项解析

    一.贷前调查事项 贷前调查是所有银行.小贷.P2P等等往出贷款部门的重中之重. 归根结底就是两条:让不对称信息最大限度对称.让软信息最大限度真实还原. 客户还不还款就是取决两大因素:还款能力.还款意愿 ...

  10. sql 有条件计数

    select InstitutionID=LEFT(InstitutionID,9), Irregularities_Type=sum(CASE WHEN Irregularities_Type> ...