-
程序次序规则:在一个线程内一段代码的执行结果是有序的。就是还会指令重排,但是随便它怎么排,结果是按照我们代码的顺序生成的不会变。
-
管程锁定规则:就是无论是在单线程环境还是多线程环境,对于同一个锁来说,一个线程对这个锁解锁之后,另一个线程获取了这个锁都能看到前一个线程的操作结果!(管程是一种通用的同步原语,synchronized就是管程的实现)
-
volatile变量规则:就是如果一个线程先去写一个volatile变量,然后一个线程去读这个变量,那么这个写操作的结果一定对读的这个线程可见。
-
线程启动规则:在主线程A执行过程中,启动子线程B,那么线程A在启动子线程B之前对共享变量的修改结果对线程B可见。
-
线程终止规则:在主线程A执行过程中,子线程B终止,那么线程B在终止之前对共享变量的修改结果在线程A中可见。也称线程join()规则。
-
线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程代码检测到中断事件的发生,可以通过Thread.interrupted()检测到是否发生中断。
-
传递性规则:这个简单的,就是happens-before原则具有传递性,即hb(A, B) , hb(B, C),那么hb(A, C)。
-
对象终结规则:这个也简单的,就是一个对象的初始化的完成,也就是构造函数执行的结束一定 happens-before它的finalize()方法。
-
方便记忆,划分为:程序的顺序性执行、volatile、synchronized、三个线程相关的(start、end、interrupt)、传递性、对象回收
相关文章
- 10-16【AntDesignVue | Table】纯前端表格 导入导出 Table表单复杂表头规则匹配模型
- 10-16RHEL7.x版本,修改网卡命名规则
- 10-16edgexfoundry之规则引擎(RuleEngine)初探
- 10-16Before Buying MB STAR C6,What Should We Know?
- 10-16Struts校验文件的搜索规则实战
- 10-16c++中派生类对基类成员的三种访问规则(转)
- 10-16ArcEngine10:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components.
- 10-16git忽视上传规则文件 .gitignore
- 10-16Git忽略规则及.gitignore规则不生效的解决办法
- 10-16rsyslogd: error during parsing file /etc/rsyslog.conf, on or before line 55: warnings occured in fil