zoukankan      html  css  js  c++  java
  • java线:辛格尔顿隐藏ThreadLocal实现线程数据共享

    效果图分享:


    A和B需要共享同一线程,还有一组的相同A和B共享还有一组线程,两组相互之间不受影响。

    代码:

    package cn.itcast.lesson6;
    import java.util.Random;
    public class ThreadLocalTest {
    	public static void main(String[] args) {
    		for(int i=0;i<2;i++){
    			new Thread(new Runnable() {
    				
    				public void run() {
    					int data = new Random().nextInt();
    					System.out.println(Thread.currentThread().getName()
    							+" has put data: " + data);
    					MyThreadScopeData.getThreadInstance().setName("name" + data);
    					MyThreadScopeData.getThreadInstance().setAge(data);
    					new A().get();
    					new B().get();
    				}
    			}).start();
    		}	
    	}
    
    	static class A{
    		public void get(){
    			MyThreadScopeData myData = MyThreadScopeData.getThreadInstance();
    			System.out.println("A from" + Thread.currentThread().getName()
    					+ " getMyData:" + myData.getName()+" , "
    					+ myData.getAge());
    		}
    	}
    	static class B{
    		public void get(){
    			MyThreadScopeData myData =  MyThreadScopeData.getThreadInstance();
    			System.out.println("B from" + Thread.currentThread().getName()
    					+ " getMyData:"+myData.getName()+" , "
    					+ myData.getAge());
    		}
    	}
    }
     class  MyThreadScopeData{
    	private MyThreadScopeData(){}
    //单例隐藏ThreadLocal实现数据共享	
    	public static /*synchronized*/ MyThreadScopeData getThreadInstance(){
    		MyThreadScopeData instance = map.get();
    		if(instance == null){
    			instance = new MyThreadScopeData();
    			map.set(instance);
    		}
    		return instance;
    	}
    	private static ThreadLocal<MyThreadScopeData> map = new  ThreadLocal<MyThreadScopeData> ();
    	
    	private String name;
    	private int age;
    	public String getName() {
    		return name;
    	}
    
    	public  void setName(String name) {
    		this.name = name;
    	}
    	public  void setAge(int age) {
    		this.age = age;
    	}
    	public int getAge() {
    		return age;
    	}
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Java 嵌套循环之九九乘法表
    Java switch语句第二种用法
    Java switch语句
    Java if-else if-else多选择结构代码
    Java if else双选择结构之计算圆的面积和周长
    Java if单选择结构---掷色子游戏
    在webstorm11中使用nodejs库的智能提示功能
    Node.JS 学习路线图
    Nodejs系列课程,从入门到进阶帮你打通全栈
    使用supervisor提高nodejs调试效率
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4622182.html
Copyright © 2011-2022 走看看