多线程学习-有序性

原创 2018年04月15日 16:50:23
  • Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性
  • volatile、synchronized、Lock

happens-before原则:先行发生原则

  • 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作
  • 锁定规则:一个unLock操作先行发生于后面对同一个锁的lock操作
  • volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作
  • 传递规则:如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C
  • 线程启动规则:Thread对象的start()方法先行发生于此线程的每一个动作
  • 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生
  • 线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测已经终止执行
  • 对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始

若某个操作次序无法满足这8个原则,则不能保证他们的有序性,则虚拟机可以随意的对他们进行重排序

============================================================================

线程安全性总结


Python-多线程

-
  • 1970年01月01日 08:00

Java多线程中提到的原子性和可见性、有序性

原子性 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行。如果一个操作时原子性的,那么多线程并发的情况下,就不会出现变量被修改的情况比如 a=0...
  • jaryle
  • jaryle
  • 2016-05-18 10:56:37
  • 7001

多线程编程 使线程具有有序性

package com.multithreading.pc73; /** * Created by nanzhou on 2017/6/30. */ public class MyThread ...
  • Angel_Heart_Java
  • Angel_Heart_Java
  • 2017-06-30 11:42:01
  • 424

JAVA多线程——线程安全之原子性,有序性和可见性

对于Java并发编程,一般来说有以下的关注点: 1.线程安全性,正确性。 2.线程的活跃性(死锁,活锁) 3.性能 其中线程的安全性问题是首要解决的问题,线程不安全,运行出来的结果和预期不一致,那...
  • a60782885
  • a60782885
  • 2017-09-02 23:00:06
  • 324

java并发之原子性、可见性、有序性

原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,...
  • gongpulin
  • gongpulin
  • 2016-04-21 18:30:28
  • 1849

Java内存模型与多线程数据可见性和操作的有序性

CPU在计算的时候,并不总是从内存读取数据,而是按:寄存器->高速缓存->内存的顺序读取,一些使用频繁的数据会被放在寄存器和高速缓存中,当线程计算完后,这些缓存的数据在适当的时候被写回内存,当多个线程...
  • YEN_CSDN
  • YEN_CSDN
  • 2016-06-17 18:34:23
  • 965

线程安全之可见性、有序性以及原子性

可见性:一个线程对主内存的修改可以及时的被其他线程观察到。 有序性:一个线程观察其他线程中的指令执行顺序,由于指令 重排序的存在,该观察结果一般杂乱无序。 原子性:提供了互斥访问。 特性 操作 ...
  • u013855332
  • u013855332
  • 2016-06-25 18:46:49
  • 1783

java内存模型的原子性、可见性、有序性(先行发生原则)

原子性、可见性、有序性 Java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这3个特征来建立的。 原子性(Atomicity):由Java内存模型来直接保证的原子性变量操作包括rea...
  • j2370530
  • j2370530
  • 2017-02-13 23:48:13
  • 536

volatile不能保证程序执行的原子性以及只能一定程度上保证有序性

volatile不能保证程序执行的原子性以及只能一定程度上保证有序性
  • u013305747
  • u013305747
  • 2017-03-21 14:07:52
  • 737

Java的原子性&&可见性&&有序性

Java的原子性&&可见性&&有序性原子性定义:原子性:是指一个操作或多个操作要么全部执行,且执行的过程不会被任何因素打断,要么就都不执行。原子操作原理(处理器是如何实现原子操作的)处理器实现原子操作...
  • qq_33689414
  • qq_33689414
  • 2017-06-21 10:16:53
  • 634
收藏助手
不良信息举报
您举报文章:多线程学习-有序性
举报原因:
原因补充:

(最多只允许输入30个字)