Package Cn.itcast.heima2;import Java.util.hashmap;import Java.util.map;import Java.util.random;public class threadlocaltest {private static threadlocal<integer> x = new threadlocal<integer> (); private static Threadlo cal<mythreadscopedata> mythreadscopedata = new threadlocal<mythreadscopedata> (); public static void Main (string[] args) {for (int i=0;i<2;i++) {new Thread (new Runnable () {@Override public void run () { int data = new Random (). Nextint (); System.out.println (Thread.CurrentThread (). GetName () + "has put data:" + data); X.set (data);/* Mythreadscopedata myData = new Mythreadscopedata (); Mydata.setname ("name" + data); Mydata.setage (data); Mythreadscopedata.set (myData); */Mythreadscopedata.getthreadinstance (). SetName ("name" + data); Mythreadscopedata.getthreadinstance (). setage (data); New A (). get (); New B (). get (); }}). Start (); }} static class a{public void Get () {int data = X.get (); System.out.println ("A from" + Thread.CurrentThread (). GetName () + "geT data: "+ data";/* Mythreadscopedata myData = Mythreadscopedata.get (); System.out.println ("A from" + Thread.CurrentThread (). GetName () + "Getmydata:" + mydata.getname () + "," + mydata.getage ( ); */Mythreadscopedata MyData = Mythreadscopedata.getthreadinstance (); System.out.println ("A from" + Thread.CurrentThread (). GetName () + "Getmydata:" + mydata.getname () + "," + mydata.getage ( )); }} static class b{public void Get () {int data = X.get (); System.out.println ("B from" + Thread.CurrentThread (). GetName () + "Get data:" + data); Mythreadscopedata myData = Mythreadscopedata.getthreadinstance (); System.out.println ("B from" + Thread.CurrentThread (). GetName () + "Getmydata:" + mydata.getname () + "," + mydata.getage ( )); }}}class mythreadscopedata{Private Mythreadscopedata () {} public static/*synchronized*/Mythreadscopedata Getthreadinstance () {Mythreadscopedata instance = Map.get (); if (instance = = null) {instance = new Mythreadscopedata (); map . Set (instance); } return instance; } private static Mythreadscopedata instance = Null;//new mythreadscopedata (); 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 int getage () {Retu RN age; } public void Setage (int.) {this.age = age;}}
Implementing thread-wide data sharing using threadlocal