gpt4 book ai didi

java - 使用synchronized(lock)时,锁对象优先是static还是non-static?

转载 作者:行者123 更新时间:2023-11-30 06:32:28 24 4
gpt4 key购买 nike

当使用这样的东西时:

private final Object lock = new Object()

静态和非静态有什么区别吗?

非静态对象是否可以锁定静态方法,反之亦然?

最佳答案

如果您使用的是非静态锁,则对象的每个实例都会有一个不同的锁对象,这可能是一个更细粒度的等价于调用:

synchronized(this) {

}

也就是说:您只是针对同一对象内的其他访问进行锁定。使用静态锁,类的每个实例都共享该锁对象。因此在任何给定时间只有一个线程可以访问同步块(synchronized block)。

所以这取决于你在做什么。在前一种情况下,除非您有多个这样的锁来保护较小的数据子集,否则分配锁对象是没有意义的。在后一种情况下,您基本上(同样,更细粒度)这样做:

synchronized(MyObject.class) {

}

也就是说,无论您拥有相同的对象还是不同的对象进行访问,您都将锁定所有访问。

这将取决于您要完成的任务、要锁定的对象以及这些锁的使用方式。如果您要保护每个实例的状态,您可能需要一个每个实例(非静态)锁定对象。如果您要保护全局状态,您需要一个在所有人之间共享的静态锁对象。

关于java - 使用synchronized(lock)时,锁对象优先是static还是non-static?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8774442/

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