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为每一个线程提供了单独的副本。

osg android 库的编译与例子编译

1.教大家如何编译osg3.2的库及cygwin 的编译方式 2.教大家如何编译osg3.4的库及cmake的编译方式 3.教大家如何配置osg提供的android的例子
  • 2017年06月14日 09:00

ThreadLocal的使用与代码示例(译)

原文:http://java.dzone.com/articles/java-thread-local-%E2%80%93-how-use  [翻墙看] Thread Local是一个有趣且实用的概念...
  • mylovepan
  • mylovepan
  • 2014-02-26 09:21:49
  • 2560

ThreadLocal的简单例子

package com.bbwl.threadlocal; public class SequenceNumber {  private static ThreadLocal seqNum  ...
  • yemaozi2009
  • yemaozi2009
  • 2014-09-11 21:56:21
  • 3468

彻底理解ThreadLocal

ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁...
  • lufeng20
  • lufeng20
  • 2014-04-22 16:59:27
  • 352796

Java-ThreadLocal的简单例子

内容:ThreadLocal:允许我们创建只能被同一个线程读写的变量,例如Web应用中将变量从前端到后台,并且需要在这次请求的线程中始终可以随时获取到。内部实现是通过一个ThreadLocalMap这...
  • u011345136
  • u011345136
  • 2015-06-02 22:53:25
  • 1468

java 深入理解ThreadLocal

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

Java学习记录--ThreadLocal使用案例

java学习记录–ThreadLocal使用案例标签(空格分隔): java最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个:public class DateUtil { priva...
  • u012706811
  • u012706811
  • 2016-11-19 16:26:29
  • 2396

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

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

跟我学Java多线程——ThreadLocal

本篇文章讲解了ThreadLocal是什么,通过一个简单的demo来说明了ThreadLocal在同一线程中实现了线程内的数据共享,不同线程间我们实现了数据的隔离性,接下来通过一步步的去读Thread...
  • zwk626542417
  • zwk626542417
  • 2015-07-27 08:18:25
  • 2946

JavaEE DBUtil结合ThreadLocal的一个案例

  • 2016年09月24日 17:54
  • 1.09MB
  • 下载
收藏助手
不良信息举报
您举报文章:java.lang.ThreadLocal例子
举报原因:
原因补充:

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