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;
    	}
    }
    


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

  • 相关阅读:
    JS---元素属性的操作
    JS---异常
    JS---OOP
    T-SQL---分页语句
    mui---在关闭webview之前给出提示
    mui---通过plus.webview.create创建webview并打开新页面并传参到新页面
    mui---要打开的页面loaded不自动显示,等服务器返回数据后,再做处理逻辑
    winform/timer控件/权限设置/三级联动
    winform 进程、线程
    winform 之MDI容器
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4622182.html
Copyright © 2011-2022 走看看