Import Java.util.Random;
public class ThreadDemo3 {
public static void Main (string[] args) {
for (int i=0;i<2;i++) {//two threads
New Thread (New Runnable () {
@Override
public void Run () {
int data =new Random (). Nextint ();
Data1.getintance (). SetName ("FDF" +data);
Data1.getintance (). setage (data);
System.out.println (Thread.CurrentThread (). GetName () + "data:" + data);
System.out.println (Thread.CurrentThread (). GetName () + "Hashcode" +data1.getintance (). GetClass (). Hashcode ());
New A (). get ();
New B (). get ();
}
}). Start ();
}
}
Static Class A {
public void get () {
int data=data1.getintance (). Getage ();
System.out.println (Thread.CurrentThread (). GetName () + "a data:" + data);
}
}
Static Class B {
public void get () {
int data=data1.getintance (). Getage ();
System.out.println (Thread.CurrentThread (). GetName () + "B Data:" + data);
}
}
}
Class data1{
private String name;
private int age;
private static threadlocal<data1> mapdata=new threadlocal<data1> ();
Private Data1 () {}
public static Data1 Getintance () {
Data1 Da=mapdata.get ();
if (da==null)
{
Da=new data1 ();
Mapdata.set (DA);
}
Return da;
}
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;
}
}
Singleton mode/threadlocal/shared data within threads