【发布时间】:2015-10-11 11:43:11
【问题描述】:
我在某些地方读到过,获取Lock 对象而不将其后的代码包含在try...finally 块中是不好的编程习惯,因此即使抛出异常也可以释放锁。
这听起来像是一个简单的问题:线程完成时是否所有属于线程的锁都会自动释放?
我问这个问题的原因是我正在处理的程序是这样的,一旦一个线程获得一个锁,它应该没有理由让它离开,直到它完成。此外,我是使用锁的新手,所以我想知道是否有任何我可能没有考虑过的陷阱。我是否必须担心在线程完成之前显式释放我的代码中的锁,或者我是否可以将其留给 JVM,确信知道所有活动线程的锁上被阻塞的其他线程将在活动线程中被激活线程停止了吗?
【问题讨论】:
-
请贴一些代码。
-
@C1sc0:一些关于什么的代码?这个问题有一个非常明确的问题陈述
-
你可以用一个非常简单的应用程序来测试它。创建两个线程,尝试获取相同的锁,然后直接杀死线程。如果第二个线程获得了锁,它确实被解锁了。
-
这取决于锁的实现,但一般不会。
-
@Patrick 我知道我有点懒……我猜我的方式……我想我可以继续假设锁是自动释放的,看看我的程序如何应对.. .
标签: java multithreading