重入意味着锁定是在每个线程而不是每个调用的基础上获得的。
由于内在锁由线程持有,这是否意味着线程运行一次等于调用基础?
谢谢,这似乎意味着:在线程中,如果我lockA
在doA
调用function的流程函数时获得了锁doB
,并且doB
还需要一个锁lockA
,那么将会有一个可重入的过程。在Java中,这种现象是按线程获取的,因此我不需要考虑死锁吗?
重入意味着锁定是在每个线程而不是每个调用的基础上获得的。
这是一个误导性的定义。这是真的(有点),但它没有切中要害。
可重入意味着(通常使用CS / IT术语)您正在做某事,而当您仍在做时,您又在做一次。对于锁,这意味着您 在单个线程上执行以下操作 :
使用可重入锁/锁定机制,获取相同锁的尝试将成功,并将增加属于该锁的内部计数器。仅当锁的当前持有者两次释放锁时,锁才会释放。
这是Java中使用原始对象锁/监视器的示例,它们是可重入的:
Object lock = new Object();
...
synchronized (lock) {
...
doSomething(lock, ...)
...
}
public void doSomething(Object lock, ...) {
synchronized (lock) {
...
}
}
可重入锁的替代方法是不可重入锁,在这种情况下,线程尝试获取已持有的锁将是一个错误。
使用可重入锁的优势在于,您不必担心由于意外获取已经持有的锁而导致失败的可能性。不利的一面是,您不能假设调用的内容不会改变锁旨在保护的变量的状态。但是,通常这不是问题。锁通常用于防止
其他 线程进行的并发状态更改。
所以我不用考虑僵局了吗?
是的你是。
线程不会对自己死锁(如果锁是可重入的)。但是,如果还有其他线程可能在尝试锁定的对象上具有锁定,则可能会出现死锁。
问题内容: 我发现此代码可在此处找到SO中的重复项。但我不明白这条线是什么意思 问题答案: 该运算符是Java中无符号的右移位运算符。它有效地将操作数除以右操作数的幂,或者仅在此处。 和之间的差异仅在移动负数时才会显示。如果运算符是a ,则运算符会将其移位到最高有效位,而无论如何都将移位。 更新: 让我们求平均值和()。我们可以轻松地进行数学运算: 现在,通过代码,涉及到以下这些位: 让我们将“转
问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如
在这组Java代码中,处的是什么意思?我试着搜索,但我没有找到任何解释。请知道的人给我解释一下。太感谢你了。
我发现这段代码是为了在SO post中找到重复的代码。但我不明白这行是什么意思
问题内容: 作为Java的初学者,我仍然不确定它的含义。有人精通Java 问题答案: 静态表示标记为此类的变量或方法在类级别可用。换句话说,你无需创建类的实例即可访问它。 因此,与其创建一个Foo实例,然后doStuff像这样调用: 你只需直接针对该类调用该方法,如下所示: