java.lang.ThreadLocal例子

原创 2007年10月15日 23:08:00

public class ThreadLocal<T>  extends Object 

该类提供了线程局部变量.这些变量不同于它们的普通对应物.因为访问一个变量(通过其 getset 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本.ThreadLocal 实例通常是类中的私有静态字段它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。

 


    
    
public ThreadLocalTest() ...{};
    
    
// 通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值
    private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() ...{     
        
protected Integer initialValue() ...{
            
return 0;
        }

    }
;
    
    
// 获取下一个序列值
    public int getNextNum() ...{
        
        seqNum.set(seqNum.get()
+1);
        
return seqNum.get();
    }

    
    
public static void main(String[] args) ...{
        
        ThreadLocalTest test 
= new ThreadLocalTest();
        
        
// 3个线程共享sn,各自产生序列号
        TestClient client1 = new TestClient(test);
        TestClient client2 
= new TestClient(test);
        TestClient client3 
= new TestClient(test);
        
        client1.start();
        client2.start();
        cl
public class TestClient extends Thread ...{
    
    
private ThreadLocalTest test;
    
    
/** *//**
     * 构造函数.
     
*/

    
public TestClient() ...{};
    
    
/** *//**
     * 构造函数.
     
*/

    
public TestClient(ThreadLocalTest test) ...{
        
        
this.test = test;
    }
;
    
    @Override
    
public void run() ...{
        
        
//{④每个线程打出3个序列值
        for(int i=0 ; i<=3 ; i++...{
            
            System.err.println(
"[currentThread name:>>]" +Thread.currentThread().getName() + "===NextNum is:==" +test.getNextNum());
        }

    }

}
ient3.start();
    }

结果

========================

[currentThread name:>>]Thread-0===NextNum is:==1
[currentThread name:>>]Thread-0===NextNum is:==2
[currentThread name:>>]Thread-0===NextNum is:==3
[currentThread name:>>]Thread-0===NextNum is:==4
[currentThread name:>>]Thread-1===NextNum is:==1
[currentThread name:>>]Thread-1===NextNum is:==2
[currentThread name:>>]Thread-1===NextNum is:==3
[currentThread name:>>]Thread-1===NextNum is:==4
[currentThread name:>>]Thread-2===NextNum is:==1
[currentThread name:>>]Thread-2===NextNum is:==2
[currentThread name:>>]Thread-2===NextNum is:==3
[currentThread name:>>]Thread-2===NextNum is:==4

========================

 通常我们通过匿名内部类的方式定义ThreadLocal的子类.

考察输出的结果信息,我们发现每个线程所产生的序号虽然都共享同一个ThreadLocalTest实例但它们并没有发生相互干扰的情况,而是各自产生独立的序列号,这是因为我们通过ThreadLocal为每一个线程提供了单独的副本。

java.lang.ThreadLocal实现原理和源码分析

java.lang.ThreadLocal实现原理和源码分析 1、ThreadLocal的原理:为每一个线程维护变量的副本。某个线程修改的只是自己的副本。 2、ThreadLocal是如何做到把变...
  • liangyihuai
  • liangyihuai
  • 2016年02月27日 16:12
  • 325

【Java】Java之经典循环小例子

九九乘法表 * 文件名称: 九九乘法表 * 作 者: 廊坊师范学院 2013级 周家林 ...
  • mrlin6688
  • mrlin6688
  • 2015年11月30日 21:33
  • 693

多线程例子双线性例子

一个线程向队列中的队列头部读取数据,一个线程向队列中的队列尾部写入数据 首先需要分析,这两个线程之间有nax...
  • xietingcandice
  • xietingcandice
  • 2014年08月25日 20:46
  • 503

【java】【多态】的一个小例子

首先要了解什么是多态? :在面向对象语言中,接口的多种不同的实现方式即为多态。具体来说,就是不同子类作为参数使用同一父类的方法 时的实现方法是不同的。   多态的表现形式有哪些? 1.重载ov...
  • NeoAdrian
  • NeoAdrian
  • 2016年04月10日 14:41
  • 2390

(10)caffe总结之运行caffe自带的两个简单例子

为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载。但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了。 注意...
  • u013289254
  • u013289254
  • 2017年04月20日 21:44
  • 359

java注解例子

java注解在web框架中使用比较广泛,这使得对象之间的关系配置起来更加容易 目前web框架中最常用的两种配置对象依赖关系的方式就是注解和xml配置文件的方法,api配置相对来说用的少一些, 下面实现...
  • liu136313
  • liu136313
  • 2015年08月08日 21:00
  • 797

递归(以及几个关于递归的小例子)

递归的正式定义: 在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。 例如,下列为某人祖先的递归定义: 某人的双...
  • u010590318
  • u010590318
  • 2014年06月13日 21:26
  • 7528

【caffe学习笔记二】——运行例子,caffe跑起来

在Ubuntu下面caffe的安装和运行都很方面,caffe的源码没有Windows版本的,下载的源码是大神修改成的可以在Windows下面运行的ceffe代码。(ps:那些大神是把caffe吃透了,...
  • wxq35665632
  • wxq35665632
  • 2016年02月21日 20:58
  • 1778

浏览OSG自带的例子

OSG开源的源码中带有很多的漂亮的例子,可以通过以下命令看到: 1.打开cmd.exe 2.进入到OpenSceneGraph-3.4.0目录下 3.运行:runexamples.bat如下图:...
  • wb175208
  • wb175208
  • 2017年07月06日 17:13
  • 252

tensorflow 小例子笔记

tensorflow 小例子笔记softmax_cross_entropy_with_logitsimport tensorflow as tf logits_list = [tf.Variable(...
  • zhongkeli
  • zhongkeli
  • 2016年11月24日 15:01
  • 913
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java.lang.ThreadLocal例子
举报原因:
原因补充:

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