如何使用ThreadLocal变量

上一篇文章主要针对用volatile关键字定义多线程之间共享变量的问题。这里基本上是一个相反的情况。在多线程编程中,有时每个线程需要自己专用的变量。与其说是变量,其实是用定义一个特殊对象(ThreadLocal)来实现的。这些ThreadLocal变量只能在线程内在线程结束之前有效,一旦线程结束,变量值也就随之消失。

 

 

看下边的例子:

import java.util.Random;

public class MyLocalThread {

 // 定义thread local variable
     static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>();
  
     // 用于生成随机数字

     static Random random = new Random();
 
     // 显示thread local variable 和 thread name
     private static void displayValues()
     {
         System.out.println( "Thread Name:" + Thread.currentThread().getName() +

                                        ", /t the ThreadLocal Variable: " + threadLocal.get() );
     }
 
     public static void main(String args[])
     {
  
        Runnable runner = new Runnable()
         {
             public void run()
             {

               // 给ThreadLocal变量设值并显示
                threadLocal.set(new Integer(random.nextInt(10000)));
                 displayValues();

                 //线程内等一段时间后再显示该变量,以确认变量仍然有效
                 try
                 {
                     Thread.sleep(((Integer) threadLocal.get()).intValue());
                     displayValues();
                 } catch (InterruptedException e)
                 {
                     e.printStackTrace();
                 }
                
             }

         };
  
  
         // 生成多个线程 

         for (int i = 0; i < 5; i++)
         {
             Thread t = new Thread(runner);
             t.start();
         }

 

     }
 }

执行结果:

 

Thread Name:Thread-0,   the ThreadLocal Variable: 1705
Thread Name:Thread-1,   the ThreadLocal Variable: 8626
Thread Name:Thread-2,   the ThreadLocal Variable: 4632
Thread Name:Thread-3,   the ThreadLocal Variable: 802
Thread Name:Thread-4,   the ThreadLocal Variable: 1072
Thread Name:Thread-3,   the ThreadLocal Variable: 802
Thread Name:Thread-4,   the ThreadLocal Variable: 1072
Thread Name:Thread-0,   the ThreadLocal Variable: 1705
Thread Name:Thread-2,   the ThreadLocal Variable: 4632
Thread Name:Thread-1,   the ThreadLocal Variable: 8626

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值