java线程基础巩固---同步代码块以及同步方法之间的区别和关系

在上一次中【http://www.cnblogs.com/webor2006/p/8040369.html】采用同步代码块的方式来实现对线程的同步,如下:

对于同步方法我想都知道,就是将同步关键字声明在方法上滴,那如果改用这种同步方式会怎样呢?下面实验下:

编译运行:

发现全被一号窗口执行了,另外两个线程都木有输出,这是为啥呢?这时就需要来分析执行流程了:

此时就可以晓得为啥全部由1号线执行了,因为其它线程还在等待1号线程释放锁,1号线程木有执行完当然其它线程也得不到锁啦,当1号线程执行完之后就退出了,接下来:

另外需要说明的是,此处同步方法同步的是this,也就是当前对象,那显示目前改成同步方法之后不是我们期望的执行结果,那如何不用同步块还是用同步方法的方式来达到之前同步块的效果:也就是三个线程都可以执行到,这时就需要对代码进行重构啦,如下:

这时再编译运行:

这样就将同步块的方式换成了同步方法,其执行结果一样,对于线程同步时尽量小范围去加,而不是一上来就直接给方法上上锁,不过具体根据实际的业务场景来决定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webor2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值