synchronized同步方法(04)synchronized方法与对象锁

为了证明前面讲述的线程锁住的是对象,看下面的例子:

定义线程类:

运行类:

运行结果:

修改方法为同步方法:

运行结果:

通过上面的实验得到结论,调用synchronized声明的方法一定是排队运行的,另外需要牢牢记住共享这两个字,只有共享资源的读写访问才需要同步化,如果不是共享资源,那么根本就没有同步的必要。





那么其它的方法在被调用时会是什么效果呢?看下面的例子:

定义线程类:    

运行类:

运行结果:

通过上面的实验可知,虽然线程A先持有了object对象的锁,但是线程b完全可以异步调用非同步方法。

继续实验,将methosB改为同步方法,

现在变成了两个线程访问同一个对象的两个同步方法,运行结果:

此实验的结论是:

1)A线程先持有了Object对象的Lock锁,B线程可以以异步的方式调用object对象的非同步方法。

2)A线程先持有object对象的Lock锁,B线程如果在这时调用object对象的另一个同步方法,则需要等待,也就是同一个对象的两个同步方法在整体上也是同步的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容