扣丁学堂Java培训简述Java同步方法和同步代码块区别

2019-04-12 14:19:50 1439浏览

本篇文章扣丁学堂Java培训小编给读者们分享一下Java同步方法和同步代码块区别,对Java开发感兴趣的小伙伴就随小编一起来看一下吧,希望对小伙伴们有所帮助。


扣丁学堂Java培训简述Java同步方法和同步代码块区别


线程同步问题大都使用synchronized解决,今天主要来说下 ,有同步代码块和同步方法的区别,先上个代码:


Java学习


行结果:


Java视频教程


showB差不多是3秒后才打印出来的,为什么呢?


在启动线程1调用方法A后,接着会让线程1休眠3秒钟,这时会调用方法C,注意到方法C这里用synchronized进行加锁,这里锁的对象是s这个字符串对象。但是方法B则不同,是用当前对象this进行加锁,注意到方法A直接在方法上加synchronized,这个加锁的对象是什么呢?显然,这两个方法用的是一把锁。


由这样的结果,我们就知道这样同步方法是用什么加锁的了,由于线程1在休眠,这时锁还没释放,导致线程2只有在3秒之后才能调用方法B,由此,可知两种加锁机制用的是同一个锁对象,即当前对象。


另外,同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁,很明显,同步方法锁的范围比较大,而同步代码块范围要小点,一般同步的范围越大,性能就越差,一般需要加锁进行同步的时候,肯定是范围越小越好,这样性能更好


有此得出Java同步方法和同步代码块区别:


一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。


二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。


三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。


想要了解更多关于Java开发方面内容的小伙伴,请关注扣丁学堂Java培训官网、微信等平台,扣丁学堂IT职业在线学习教育有专业的Java讲师为您指导,此外扣丁学堂老师精心推出的Java视频教程定能让你快速掌握Java从入门到精通开发实战技能。扣丁学堂Java技术交流群:850353792。


扣丁学堂微信公众号                              HTML5前端开发VIP免费公开课

     【关注微信公众号获取更多学习资料】           【扫码进入HTML5前端开发VIP免费公开课



查看更多关于“Java开发资讯”的相关文章>>




标签: Java培训 Java基础教程 Java学习视频 Java教学视频 java入门教程 Java教程视频 java在线学习 java在线视频 java在线教程

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号