gpt4 book ai didi

java - 同步(this)和同步(其他对象)之间有什么区别

转载 作者:行者123 更新时间:2023-12-02 03:33:03 25 4
gpt4 key购买 nike

Public Class A
{
private Object memberlockObject = new Object();

public doStuffapproach1(){

synchronized(this){
// Do something;
}
}

public doStuffapproach2(){

synchronized(memberlockObject){
// Do something;
}
}

public doStuffapproach3(Object parameterLockObject){

synchronized(parameterLockObject){
// Do something;
}
}

}

在上面的代码中,doStuffapproach1、doStuffapproach2、doStuffapproach3方法是否实现了相同类型的 block 同步。如果不是,它们有何不同。分别在什么场景下使用?

P.S:我知道方法级同步与在(this)上同步整个方法体一样好。

最佳答案

当你使用synchronized关键字时,你需要定义一个对象来用作监视器。

synchronized(this)使用当前对象作为监视器

synchronized(otherObject) 使用另一个对象作为监视器

如果您需要在不同类中的同一对象上进行同步,那么至少其中一个类需要在与 this 不同的对象上进行同步。

请注意,将方法隐式定义为同步将在this上同步(如果该方法不是静态)。

<小时/>

doStuffapproach1 方法对此进行同步,因此同一对象上对该方法的任何调用都会同步。

doStuffapproach2 的工作方式与 doStuffapproach1 完全相同,因为您锁定的对象在当前对象中具有唯一的实例。

doStuffapproach3 的工作方式有所不同,因为您传递监视器并取决于您作为参数传递的内容。

关于java - 同步(this)和同步(其他对象)之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805284/

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