摘要: volatile变量自身具有下列两点特性: 可见性:锁的happens-before规则保证释放锁和获取锁的两个线程之间的内存可见性。意味着对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。 原子性:对任意单个volatile变量的读/写具有原子性,但类似于 阅读全文
posted @ 2017-09-05 16:40 动物园里的一只程序猿 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 数据竞争: 当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量 在另一个线程读同一个变量 而且写和读没有通过同步来排序 如果程序是正确同步的,程序的执行将具有顺序一致性–即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同 顺序一致性内存 阅读全文
posted @ 2017-09-05 16:04 动物园里的一只程序猿 阅读(475) 评论(0) 推荐(0) 编辑
摘要: 重排序:是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段 1.、编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。 2.、指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指 阅读全文
posted @ 2017-09-05 15:23 动物园里的一只程序猿 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 线程之间的通信机制有两种: 1、共享内存:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式的通信。 2、消息传递:线程之间没有公共状态,线程之间必须发送消息来显示的进行通信 同步:是指程序中用于控制不同线程间操作发生相对顺序的机制。 在共享内存并发模型里,同步是显式进行的。程序员必须显 阅读全文
posted @ 2017-09-05 15:03 动物园里的一只程序猿 阅读(351) 评论(0) 推荐(0) 编辑