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

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

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

编译运行:

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

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

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

这时再编译运行:

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

posted on 2017-12-16 21:46  cexo  阅读(357)  评论(0编辑  收藏  举报

导航