老师你好,多线程问题请教一个问题

来源:9-4 synchronized和ReentrantLock的区别

慕仔3163040

2019-12-21

如下图所示,如果我new出来两个不同的rtld1,rtld2对象分别传给thread1和thread2,与截图中只new出来一个rtld对象同时传给thread1和thread2有什么区别呢?

http://img1.sycdn.imooc.com/szimg/5dfdbfc809f7773215020299.jpg

写回答

1回答

weixin_慕莱坞0474613

2019-12-22

如果thread1和thread2中传入的是不同对象,那么两个线程之间不会共享同一个rtld,使用的是不同对象.

如果使用的是同一个对象,做写操作可能会线程不安全,具体线程是不是安全还要看你具体的代码逻辑.

1
3
翔仔
回复
慕仔3163040
同学好,代码里面,我们利用的是同一个对象的锁,即ReentrantLockDemo类里面的lock成员变量,执行的时候,由于用的是同一个rtld,所以里面的lock是同一个,由于共享的是同一个lock,才能实现执行上的串行制约。同学说的synchronized也是需要建立在多个线程共享同一个synchronized对象的基础上才能实现线程串行的。所以你如果用两个rtld的话lock就是两个不同的对象,两个线程锁的是各自的lock,并不能达到串行执行,也就是达不到锁的目的。
2019-12-23
共3条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程