Java Concurrency in Practice :基础知识(重排序与可见性)
2016-11-24 19:38
441 查看
重排序 与 可见性
1、小段代码片
public class NoVisibility{ private static boolean ready; private static int number; private static class ReaderThread extends Thread{ public void run(){ while(!ready) Thread.yield(); System.out.println(number); } } public static void main(String[] args){ new ReaderThread().start(); number = 42; ready = true; } }
2、输出结果解释
结果一:持续循环结果二:输出为0(此处发生了重排序)
3、如何防止错误结果的发生(加锁与可见性)
仅以volatile为例public class Visibility{ private static volatile boolean ready; private static int number; private static class ReaderThread extends Thread{ public void run(){ while(!ready) Thread.yield(); System.out.println(number); } } public static void main(String[] args){ new ReaderThread().start(); number = 42; ready = true; } }
4、输出结果分析
42 :给ready设置volatile属性,使读写线程对ready保持可见相关文章推荐
- Java Concurrency in Practice :基础知识(正确的同步 -- 客户端加锁)
- Java Concurrency in Practice :基础知识(正确的同步 - 组合)
- Java Concurrency in Practice :基础知识(线程同步)
- [Java Concurrency in Practice]第五章 基础构建模块
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 5.基础构建模块
- Java Concurrency In Practice
- Java Concurrency In Practice Notes
- Java Concurrency in Practice 笔记
- java基础知识之 算法 【冒泡排序】【快速排序】
- Java Concurrency in Practice 读书笔记 第十章
- Understand <Java Concurrency in Practice>
- (java基础知识)HashMap排序,Comparator接口详解
- Java concurrency in practice 笔记
- java基础知识4--数组,排序,二分查找
- java concurrency in practice - 1
- Java 基础小知识二:使用Comparator 对ArrayList 进行排序
- java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
- 《Java Concurrency in Practice》ch5 Building Blocks
- 《Java Concurrency in Practice》ch11 Performance and Scalability
- 《Java Concurrency in Practice》ch8 Applying Thread Pools