gpt4 book ai didi

java - 同步关键字 - 它是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 05:52:43 25 4
gpt4 key购买 nike

如果我有一个类,称它为 X 并且 X 包含一个集合(假设我没有使用同步集合之一,只是一个普通集合)。

如果我要编写自己的方法 synchronized add() - 锁定如何工作?锁定是在 X 的实例上完成的,而不是在集合对象上完成的吗?

所以同步我的 add() 方法不会阻止 X 的许多实例调用 add() 并插入到集合中——因此我仍然可能遇到线程问题?

最佳答案

同步方法锁定对象。如果您的 X.add 是同步的,它将阻止同一 X 对象的其他同步方法的并发执行。如果 X 对象之外的任何人都可以访问同一集合,则该集合将不 protected 。

如果您希望您的 Collection 受到保护,请确保除 X 的同步方法外,其他人无法访问它。此外,这在您的问题中有点不清楚,但请注意,同步的非静态方法会锁定对象。假设每个 X 实例都有自己的集合,它们不会相互干扰。

顺便说一句,另一个选项是锁定集合而不是 X 对象:

void add(Object o) {
synchronized(myCollection) {
myCollection.add(o);
}
}

这将同步访问锁定的集合而不是 X 对象。使用您认为更简单、更有效的任何一个。

关于java - 同步关键字 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363592/

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