Import Java.util.HashMap;
Import Java.util.Map;
Import Java.util.Random;
/**
* Created by Chengtao on 17/12/3.
* Following 5, threadlocal is the map that the system has provided for us
*/
public class Thread0601_threadlocal {
private static int data = 0;
private static threadlocal<integer> Threadlocaldata = new threadlocal<integer> ();
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);
Threadlocaldata.set (data);
New THREAD0601_THREADLOCAL.A (). get ();
New thread0601_threadlocal.b (). get ();
}
}). Start ();
}
}
Static Class a{
public void get () {
int data = Threadlocaldata.get ();
System.out.println ("A from" + Thread.CurrentThread (). GetName ()
+ "Get Data:" + data);
}
}
Static Class b{
public void get () {
int data = Threadlocaldata.get ();
System.out.println ("B from" + Thread.CurrentThread (). GetName ()
+ "Get Data:" + data);
}
}
}
----------------------------------------
----------------------------------------
----------------------------------------
Import Java.util.HashMap;
Import Java.util.Map;
Import Java.util.Random;
/**
* Created by Chengtao on 17/12/3.
* After 6.1, if you share multiple variables? How do I hide the ThreadLocal class?
*/
public class Thread0602_threadlocal {
private static threadlocal<integer> x = new threadlocal<integer> ();
private static threadlocal<mythreadscopedata> Mythreadscopedata = new threadlocal<mythreadscopedata> ();
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);
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 () {
return age;
}
public void Setage (int.) {
This.age = age;
}
}
Java multithreaded day06 threadLocal