0

此问题基于Synchronizing on an Integer results in NullPointerException并源自此问题Synchronizing on an Integer value

我想知道在 Java 中增加锁数量的最佳方法是什么。除了ConcurrentHashMap在即基于固定数组并通过计算键的哈希来引用数组的索引来实现之外?

以下是预期的。如果doMoreThing()一个对象正在处理中,那么doAnotherThing()如果它从不同的线程调用,我不应该为同一个对象做。

public void doSomething(int i) {
    doAnotherThing(i);// some checks here based on it it will call to
                        // doMoreThing
    doMoreThing(i);
}
4

1 回答 1

4

Java 中的每一个Object都有一个关联的锁。如果你想要一个新的锁,你可以创建一个新的Object. 引用的问题没有说明您为什么要尝试增加锁的数量,或者您的意思是什么。也许你可以提供更多细节。

更新以下更改的问题

我想我看到了你的目标:实际上,你想要一个正在通过的synchronized障碍。有两种相对简单的方法来做你所追求的:intdoSomething

a)多个线程能够同时调用不同的 s真的很重要吗?如果没有,您可以将两个电话都放在一个doSomething intsynchronized(this)

b) ints 不是Objects。如果您更改doSomething为 takeInteger并且还将调用doSomething的任何内容(以及调用该调用的内容等)更改为也使用Integers,您可以在Integer. 这里重要的是要确保每个调用者都将使用相同的Integer对象 - 可能有多个Integer具有相同int值的 s,但在不同的 s 上同步Integer不会提供您正在寻找的保护。

于 2012-10-15T07:01:48.830 回答