(38)21.3.8 线程本地存储---Java编程思想之并发笔记

1.防止任务在共享资源上产生冲突的第二种方式是根除对变量的共享。
       线程本地存储是一种自动化机制,可以为使用相同变量的每个不同的线程都创建不同的存储。因此如果你有5个线程都要使用变量x所表示的对象,那线程本地存储就会生成5个用于x的不同的存储块。主要是,它们使得你可以将状态与线程关联起来。

2.创建和管理本地线程由java.lang.ThreadLocal类实现

3.例1
package  jiangning;

import  java.util.Random;
import  java.util.concurrent.ExecutorService;
import  java.util.concurrent.Executors;
import  java.util.concurrent.TimeUnit;

class  Accessor  implements  Runnable{
        private  final  int  id ;
        public  Accessor( int  idn){
              this . id  = idn;
      }
        public  void  run() {
              while (!Thread.currentThread().isInterrupted()){
                  ThreadLocalVariableHolder. increment();
                  System.  out .println( this );
                  Thread. yield();
            }
      }
        public  String toString(){
              return  "#"  +  id  +  " : "  + ThreadLocalVariableHolder. get();
      }
      
}
public  class  ThreadLocalVariableHolder {
        private  static  ThreadLocal<Integer>  value  =  new  ThreadLocal<Integer>(){
              private  Random  rand  =  new  Random(47);
              protected  synchronized  Integer initialValue(){
                    return  rand  .nextInt(1000);
            }
      };
        public  static  void  increment(){
              value .set( value  .get()+1);
      }
        public  static  int  get(){
              return  value  .get();
      }
        public  static  void  main(String[] args)  throws  Exception {
            ExecutorService exec = Executors. newCachedThreadPool();
              for ( int  i=0; i<5; i++){
                  exec.execute(  new  Accessor(i)); //创建了5个线程
            }
            TimeUnit.  SECONDS .sleep(3);
            exec.shutdownNow();
      }

}

/**
  *  部分输出结果是
#2  :  25214
#0  :  23754
#1  :  19794
#3  :  20652
#3  :  20653
#3  :  20654
*/

分析:一个 ThreadLocalVariableHolder  对象,每个单独的线程都被分配了自己的存储,它们每个都需要跟踪自己的计数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值