synchronized有没有指令重排序的功能


本文小编为大家详细介绍“synchronized有没有指令重排序的功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“synchronized有没有指令重排序的功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.volatile可以禁止指令的重排序功能。那么synchronized有这个功能吗?答:重排序是指JVM为了提高执行效率,会对我们编写的代码进行一些额外的优化。敲重点:重排序所实现的优化不会影响单线程程序执行结果根据重排序,以上代码的实际执行顺序可以是1、2、3、4,也可以是2、3、1、4,还可以是2、1、3、4等,因为这几种可能的最终执行结果都是相同的。(实际上第4句还可以再拆)而synchronized的作用是加锁,可以保证串行执行,即可以让并发环境 转为单线程环境。因此加了synchronized就已经是单线程环境了。既然是单线程,那么无论是否进行了重排序,最终的结果都不会有影响,即都可以保证线程安全。所以说,在使用synchronized时根本不用关心“重排序”这个问题,无论它支持或不支持,都已经不重要了。2.之前有听说:Java 中String定义的变量值不可改变,例如String str=”a”,str=”b”,则表示 第一次str指向”a”,第二次str指向”b”。但源码里String是final修饰的,str的“指向”应该不能变的吧?答:String是final修饰的,说明String这个“类”是final的,这一点只能说明String不能被继承(概念:final修饰的类不能被继承);而str指向什么,跟“final 类”没有任何关系,所以你把二者搞混了。3.“如果一个对象存在着指向它的引用,那么这个对象就不会被GC回收”,这句话对吗?不对。JVM中存在着四种类型的引用:强引用、软引用、弱引用和虚引用。你这句话只适用于“强引用”,Object ref = new Object()中的ref就是一个强引用。但除此以外,还有以下三个:软引用:当JVM的内存足够时,GC不会主动回收软引用对象;但当JVM的内存不足时,GC就会去主动回收软引用对象。弱引用:当GC进行垃圾回收时,无论是否当时JVM的内存是否充足,都会去主动回收弱引用对象。虚引用:是否使用虚引用对于一个对象本身来说都没有任何区别。虚 香港云主机引用的价值在于和引用队列一起使用。读到这里,这篇“synchronized有没有指令重排序的功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注开发云行业资讯频道。

相关推荐: Python学习步骤该如何安排

Python学习步骤该如何安排,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python学习步骤如何安排?一、清楚学习目标无论是学习什么知识,都要有一个对学习目标的清楚认识。只有这…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 11/12 16:21
下一篇 11/12 16:21

相关推荐