EffectiveJava读书笔记 第10章 并发
来源:互联网 发布:js中格式化日期为date 编辑:程序博客网 时间:2024/05/17 02:21
线程:允许多个活动。
第六十六条:同时访问共享的可变数据
关键字:synchronized, 保证同一个时刻,只有一个线程可以执行某一个方法,或者某一个代码块。
java的语言规范保证读取或者写一个变量是原子的,除非这个变量的类型是long或者double。换句话说:读取一个非long 和double类型的变量,可以保证返回的值是某个线程保存在该变量中的,即使多个线程在没有同步的情况下并发地修改这个变量也是如此。
为了在线程之间进行可靠的通信,也为了互斥访问,同步也是必要的。
java语言规范中“内存模型”,规定了一个线程所做的变化何时以及如何变成对其他线程可见。
不要使用Thread.stop()方法阻止一个线程妨碍另一个线程的任务。建议做法是:让第一个线程轮询poll一个boolean域,这个域默认为false。但是可以通过第二个线程设置为true,来表示第一个线程将终止自己。
问题在于:没有同步,就不能保证后台线程何时“看到”主线程对stopReuquested的值所做的改变。没有同步,虚拟机将代码:
转变成为:
这是可以接受的,这种优化称作提升。正是HopSpot Seved VM的工作。结果是个活性失败:这个程序无法前进。
修改的方法是:
这个时候,读方法:stopRequested()和写方法requestStop()都被同步了。
如果读写操作没有都被同步的话,同步是不会起作用的。
0 0
- EffectiveJava读书笔记 第10章 并发
- EffectiveJava第十章:并发
- EffectiveJava 读书笔记 第2章 创建和销毁对象
- EffectiveJava读书笔记
- effective java 读书笔记---第10章 并发
- Effective Java读书笔记(第10章-并发)
- EffectiveJava(笔记九) 并发
- EffectiveJava第43条
- 《Python语言及其应用》读书笔记(10)之第11章并发和网络(关键词:并发/网络)
- 第10章 并发
- 第10章 并发
- LDD3 读书笔记之 第 5 章 并发和竞争情况
- LDD3 读书笔记之 第 5 章 并发和竞争情况
- LDD3读书笔记(第4章 并发与竞态)
- 读书笔记:Java并发实战 第13章 显式锁
- java并发编程实战-读书笔记-第1章 简介
- 【读书笔记】TCP/IP网络编程 第18章 多线程并发
- 《并发编程的艺术》读书笔记-第2章java并发机制的底层实现原理
- Mysql优化与索引总分析【图解】
- Qt源码编译configure配置参数
- javascript的创建对象
- 【Java并发】JAVA并发编程实战-读书笔记20
- QSettings注册表的第二种用法
- EffectiveJava读书笔记 第10章 并发
- Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so 错误解决方法
- javascript的继承实现
- 一个简易计算器
- oracle客户端plsql,sql语句查询的结果列表自动刷新功能
- leetcode---Combination Sum III---回溯
- MySQL事务
- 客户端day01
- 项目经理的利器 - 甘特图