5、JMM是干什么的?
解释:Java内存模型提供如何按需禁用缓存和编译优化的方法,具体方法包括<br>Synchronized,Volatile,Final以及happens-before
可以保证可见性,原子性,有序性
6、重排序是干什么的?happen-before规则解决了什么问题?
重排序提高性能,三重(编译器,指令集,内存系统),出现内存可见性问题。<br><br>happen-before规则提供了阻止重排序出错误的一些规则。
7、happen-before规则?
1、单一线程<b>顺序</b>规则: 在一个线程内,在程序前面的操作happen-before于后面的操作
2、监视器<b>锁</b>规则: 对一个锁的解锁操作happen-before后面对同一个锁的加锁操作
3、volatile变量规则:对一个volatile变量的写规则happen-before于后面对这个变量的读操作
4、传递性规则:如果a happen-before b,b happen-before c 则 a happen-before c
5、线程start()规则:如果线程A执行操作ThreadB.start(),那么线程A的ThreadB.start()操作<br>happen-before于线程B中的任意操作
6、Join规则:如果线程A执行操作ThreadB.join()并成功返回,那么B线程内的任意操作happen-before<br>于线程A从ThreadB.join()操作成功返回<br>
7、线程中断规则:对线程interrupt()方法调用 happen-before 于被中断线程的代码检测中断事件的发生,<br>可以通过interrupted()方法检测到是否有中断发生。
8、对象终结规则:一个对象的初始化完成(构造函数执行结束)happen-before 于它的finalize()方法开始。