知识点:局部变量共享
共享单个数据
创一个容器类,存放ConcurrentHashMap类对象(静态的)
public class Container { public static final ConcurrentHashMap<Thread, Integer> map = new ConcurrentHashMap<>(); }
创建两个类A和B
public class A { public void println(){ Thread currentThread = Thread.currentThread(); Integer value = Container.map.get(currentThread); System.out.println(currentThread.getName()+"中的A类输出为:"+value); } }
最后在main函数中,new两个线程
public class Test01 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { Container.map.put(Thread.currentThread(), 10); int i = 10; A a = new A(); B b = new B(); a.println(); b.println(); } }, "线程1").start(); new Thread(new Runnable() { @Override public void run() { Container.map.put(Thread.currentThread(), 20); int i = 20; A a = new A(); B b = new B(); a.println(); b.println(); } }, "线程2").start(); } }
共享多个数据-----value转换成集合,可以存放多个数据
思想:将value转换成集合,可以存放多个值。
创建容器类
public class Container { public static final ConcurrentHashMap<Thread,Data> map = new ConcurrentHashMap<>(); }
创建存放多个数据的类
public class Data { private String str; private int i; public Data(String str, int i) { this.str = str; this.i = i; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public int getI() { return i; } public void setI(int i) { this.i = i; } @Override public String toString() { return "Dtaa [str=" + str + ", i=" + i + "]"; } }
创建两个类A和B
public class A { public void println(){ Thread currentThread = Thread.currentThread(); Data data = Container.map.get(currentThread); System.out.println(currentThread.getName()+":"+data.toString()); } }
B类似A
main函数中
public class Test01 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { Data data = new Data("123", 1); Container.map.put(Thread.currentThread(), data); A a = new A(); B b = new B(); a.println(); b.println(); } }, "线程1").start(); new Thread(new Runnable() { @Override public void run() { Data data = new Data("3232", 8); Container.map.put(Thread.currentThread(), data); A a = new A(); B b = new B(); a.println(); b.println(); } }, "线程2").start(); } }
共享多个数据-----ThreadLocal
创建容器类
public class Container { public static final ThreadLocal<Data> local = new ThreadLocal<>(); }
Data类同上
创建A类和B类
public class A { public void println(){ Thread currentThread = Thread.currentThread(); Data data = Container.local.get(); System.out.println(currentThread.getName()+":"+data.toString()); } }
main中
public class Test01 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { Data data = new Data("123", 1); Container.local.set(data);; A a = new A(); B b = new B(); a.println(); b.println(); } }, "线程1").start(); new Thread(new Runnable() { @Override public void run() { Data data = new Data("3232", 8); Container.local.set(data);; A a = new A(); B b = new B(); a.println(); b.println(); } }, "线程2").start(); } }
局部变量共享
最新推荐文章于 2024-07-03 19:13:37 发布