zoukankan      html  css  js  c++  java
  • java的ThreadLocal类的使用方法

    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的顺序,说明没有线程之间的相互干扰。


  • 相关阅读:
    使用 %matplotlib inline 出错?
    RandomForest 调参
    sql中的笛卡尔积
    Sublime text 3 搭建Python3 IDE
    在Windows Python3.5 安装LightGBM
    lodash获取数组或对象的值 at
    lodash 移除数据元素 pull without 删除数组元素
    js 常用类型转换简写
    UTC时间格式转换
    CSS Flexible 布局兼容性以及解决方案
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7403794.html
Copyright © 2011-2022 走看看