Java多线程进一步理解之----------线程共享数据
说起线程共享数据有几种方式,
1.使用公共集合类来实现,代码很简单就不多解释:
public class TestThreadShareData { private static int data = 0; private static Map<Thread,Integer> map = 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(); map.put(Thread.currentThread(), data); System.out.println("main" + Thread.currentThread().getName() + "data=" + data); new A().get(); new B().get(); } }).start(); } } static class A { public void get() { data = map.get(Thread.currentThread()); System.out.println("A from main"+Thread.currentThread().getName() + "data = "+data); } } static class B { public void get() { data = map.get(Thread.currentThread()); System.out.println("B from main"+Thread.currentThread().getName() + "data = "+data); } } }
2.使用互斥的访问机制
public class doThreadShareData { //java.util.concurrent public static void main(String[] args) { ShareData shareData =new ShareData(); new Thread(new Runnable() { @Override public void run() { shareData.deccreament(); } }).start(); new Thread(new Runnable() { @Override public void run() { shareData.increment(); } }).start(); } } class ShareData { private int j = 0; public synchronized void increment(){ j++; } public synchronized void deccreament(){ j--; } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
8月6日云栖精选夜读 | 阿里云CPFS在人工智能/深度学习领域的实践
AI/DL在迅速发展 随着数据量的爆发式增长和计算能力的不断提升,以及在算法上的不断突破,人工智能(AI,Artificial Intelligence )和其支持的深度学习(DL,Deep Learning)计算模型取得了突飞猛进的发展。 热点热议 阿里云CPFS在人工智能/深度学习领域的实践 作者:nas-hz 发表在:阿里云存储服务 【苹果万亿市值】要怀念乔帮主,但也要警惕在AI时代掉队 作者:技术小能手 发表在:新智元 马斯克:终于可以跟英伟达分手,特斯拉要用自研AI芯片! 作者:技术小能手 发表在:新智元 知识整理 删除链表的倒数第N个节点 作者:技术小能手 发表在:小詹学Python 【Hacker News最火教程】机器学习必备的数学知识 作者:技术小能手 发表在:新智元 快速掌握:大型分布式系统中的缓存架构 作者:技术小能手 发表在:数据和云 深入解析TRUNCATE TABLE – 手工修复和验证过程 作者:技术小能手 发表在:数据和云 Java 集合框架 ArrayList 源码剖析 作者:技术小能手 发表在:Java杂记 美文回顾 【图像分割里程碑】南开提出首个人...
- 下一篇
Java多线程进一步的理解------------实现读写锁
public class ReadAndWriteLock { public static void main(String[] args) { final QueueJ q = new QueueJ(); for (int i = 0; i <3 ; i++) { new Thread(){ @Override public void run() { while (true) { q.get(); } } }.start(); new Thread(){ @Override public void run() { q.put(new Random().nextInt(1000)); } }.start(); } } } class QueueJ { private Object data = null;//共享数据,只能有一个线程 private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); public void get() { rwl.readLock().lock(); try { System.ou...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8