gpt4 book ai didi

java - 增加锁数量的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 18:59:09 26 4
gpt4 key购买 nike

此问题基于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);
}

最佳答案

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

更新以下已更改的问题

我想我明白你的目标:实际上,你想要在 int 上有一个 synchronized block ,doSomething 正在被传递。有两种相对简单的方法可以完成您所追求的任务:

a) 多个线程能够使用不同 int 同时调用 doSomething 真的很重要吗? ?如果没有,您可以将两个调用放在 synchronized(this)

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

关于java - 增加锁数量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com