gpt4 book ai didi

java - java线程中如何判断同步哪个对象?

转载 作者:搜寻专家 更新时间:2023-10-31 08:06:25 24 4
gpt4 key购买 nike

我想我可以使用任何对象作为 block 进行同步,例如:

synchronized(new Object()){
}

但我经常看到在需要 hashmap 是线程安全的时候同步一个 hashmap。但我认为我可以使用另一个对象来代替 hashmap。那么哪个对象最好同步呢?

最佳答案

执行 synchronized (new Object()) { ... } 根本没有用,因为无论如何其他线程都不会获得被锁定的对象。

您应该在“保护”资源的对象上进行同步。显然,如果多个线程需要访问同一资源,则保护资源的对象需要对两个线程都可用。

也许你已经看到了:

class SomeClass {

final private Object lock = new Object();

void method() {
...
synchronized (lock) {
...
}
...
}
}

然而,这与执行 synchronized (new Object()) 有很大不同,因为在上面的代码中,同一个对象用于执行该方法的所有线程。

but I often see to synchronized one hashmap when need hashmap be thread safe.but I think i can use one other object to instead of the hashmap. So which object be synchrozied best?

是的,如果 HashMap 是要在多个线程之间共享的资源,那么在该对象上进行同步是很常见的。

synchronized (someHashMap) {
... use someHashMap in a thread safe way ...
}

是的,您也可以在某些成员字段 lock = new Object() 上进行同步。事实上,有时首选使用专用锁对象进行同步,因为它不会干扰您正在保护的对象的同步方法。

关于java - java线程中如何判断同步哪个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840959/

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