请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

正在回答 回答被采纳积分+3

1回答

weixin_慕莱坞0474613 2019-12-22 14:07:20

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

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

1 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    赞同学的热心回答,确实是这样子的,如果new两个就达不到共用一个锁来实现锁资源让线程等待执行的目的了
    回复 有任何疑惑可以回复我~ 2019-12-22 14:24:03
  • 提问者 慕仔3163040 回复 翔仔 #2
    老师你好,我没看明白是怎么回事,无论传给thead1和thread2的rtld是否为同一个对象,最终都会生成两个thread1和thread2,后续如果需要同步操作的话,使用是synchronized去锁同一个对象进行同步就好了,所以传入不同的rtld到底有啥区别呢?老师帮忙详细解答下
    回复 有任何疑惑可以回复我~ 2019-12-22 14:43:39
  • 翔仔 回复 提问者 慕仔3163040 #3
    同学好,代码里面,我们利用的是同一个对象的锁,即ReentrantLockDemo类里面的lock成员变量,执行的时候,由于用的是同一个rtld,所以里面的lock是同一个,由于共享的是同一个lock,才能实现执行上的串行制约。同学说的synchronized也是需要建立在多个线程共享同一个synchronized对象的基础上才能实现线程串行的。所以你如果用两个rtld的话lock就是两个不同的对象,两个线程锁的是各自的lock,并不能达到串行执行,也就是达不到锁的目的。
    回复 有任何疑惑可以回复我~ 2019-12-23 01:01:40
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信