java多线程学习(三)---线程范围内数据共享
来源:互联网 发布:jquery.rotate.js 编辑:程序博客网 时间:2024/05/29 05:14
初次尝试
public class ThreadScopeShareData { private static int data = 0; public static void main(String[] args) { for (int i = 0; i <2 ; i++) { new Thread(new Runnable() { @Override public void run() { data = new Random().nextInt(); System.out.println(Thread.currentThread().getName() + "has put data :" + data); new A().get(); new B().get(); } }).start(); } } static class A{ public void get(){ System.out.println("A from " + Thread.currentThread().getName() + " get data :" + data); } } static class B{ public void get(){ System.out.println("B from " + Thread.currentThread().getName() + " get data :" + data); } }}
发现取得的数据不正确
修改代码,再次尝试
public class ThreadScopeShareData { private static int data = 0; private static Map<Thread,Integer> threadDate = new HashMap<Thread,Integer>(); public static void main(String[] args) { for (int i = 0; i <2 ; i++) { new Thread(new Runnable() { @Override public void run() { data = new Random().nextInt(); System.out.println(Thread.currentThread().getName() + "has put data :" + data); threadDate.put(Thread.currentThread(),data); new A().get(); new B().get(); } }).start(); } } static class A{ public void get(){ int data =threadDate.get(Thread.currentThread()); System.out.println("A from " + Thread.currentThread().getName() + " get data :" + data); } } static class B{ public void get(){ int data =threadDate.get(Thread.currentThread()); System.out.println("B from " + Thread.currentThread().getName() + " get data :" + data); } }}
数据获取正确
也可以使用ThreadLocal来实现
public class ThreadLocalTest { private static ThreadLocal<Integer> x = new ThreadLocal<Integer>(); 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); 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); } } static class B{ public void get(){ int data =x.get(); System.out.println("B from " + Thread.currentThread().getName() + " get data :" + data); } }}
效果相同
阅读全文
0 0
- java多线程学习(三)---线程范围内数据共享
- 多线程学习(四)-线程范围内共享数据
- Java基础:多线程之线程范围内的数据共享ThreadLocal
- java多线程:5、线程范围内的数据共享_ThreadLocal
- 多线程_线程范围内数据共享
- 多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)
- java多线程:线程范围内共享变量(四)
- Java并发库(五、六、七):线程范围内共享数据、ThreadLocal、共享数据的三种方法
- 张孝祥实现线程范围内数据共享(学习笔记)
- Java线程范围内的共享数据(1)
- Java线程范围内的共享数据(2)
- java线程范围内的数据共享
- 【java并发】线程范围内共享数据
- 线程范围内共享数据
- 线程范围内数据共享
- 线程范围内共享数据
- 线程范围内共享数据
- 多线程学习笔记 理解一下 线程范围内数据共享,线程外独立
- WebView API指南
- docker:一次执行,多条命令
- JAVA 多线程的简单使用
- 骰子类游戏
- 郝斌老师C语言学习笔记----补码和位运算符
- java多线程学习(三)---线程范围内数据共享
- PAT乙级1031 查验身份证
- VMware14黑屏问题
- Codeforces 484B Maximum Value——思维
- ACM训练半周总结—11月3日
- IDEA快捷键
- 小学奥数题C语言解法
- 常用函数
- IOS如何访问本地和外部页面