synchronized 关键字,学习问题求助
学习线程的时候对synchronized参数用法不理解,网上找找资料问题:为什么同步代码块中的内容已经执行完了,却没有释放锁呢?
会不会是释放的时候,同一个线程又获取到锁了?
文章中给的原因是:sleep时候不会释放锁,其他线程也无法进行操作。
我对这里有点疑惑,sleep是线程等待,不管有没有等待,代码块结束后不就是应该释放锁么?
文章地址:https://blog.csdn.net/a1064072510/article/details/84065646
Thread.sleep()是当前线程等待,也算在你的代码块中
经测试,可以切换线程。文章描述错了 这就相当于你把门上锁了,然后拿了钥匙在门外等了5秒钟再开锁,在这5秒中里,别人没有钥匙也开不了锁 VioletKiss 发表于 2021-11-25 10:22
这就相当于你把门上锁了,然后拿了钥匙在门外等了5秒钟再开锁,在这5秒中里,别人没有钥匙也开不了锁
学习了,谢谢:lol Hknius 发表于 2021-11-25 10:11
Thread.sleep()是当前线程等待,也算在你的代码块中
学习了,谢谢 代码执行猜想:
1、首个线程A获取锁,执行代码
2、A线程等待了0.005秒
3、因为线程等待了,对A线程来讲,锁还在他手里,A还可以继续执行
4、A执行第二遍,然后再等待,进入循环,从15-0都应该是A线程再执行
但我把线程等待提高到1秒,数字换成150。
A线程等待1秒的过程中,并未释放锁,其他线程应该是不可以参与竞争的,应该由持锁的A继续执行,但我测试的时候发现,线程切换了,是为什么呢?
我酒桶你纳尔 发表于 2021-11-25 11:18
代码执行猜想:
1、首个线程A获取锁,执行代码
2、A线程等待了0.005秒
大佬,学习了。 本帖最后由 VioletKiss 于 2021-11-25 13:52 编辑
我酒桶你纳尔 发表于 2021-11-25 11:18
代码执行猜想:
1、首个线程A获取锁,执行代码
2、A线程等待了0.005秒
当你打印出那行字后就代表释放锁了
因为你的线程A执行结束了释放了锁,这时候所有线程就会参与竞争,线程E竞争过了自然就切换了
页:
[1]