标签:
效果图分享:
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线:辛格尔顿隐藏ThreadLocal实现线程数据共享
标签:
原文地址:http://www.cnblogs.com/gcczhongduan/p/4622182.html