gpt4 book ai didi

java - 同步块(synchronized block)问题?

转载 作者:行者123 更新时间:2023-12-01 06:36:08 24 4
gpt4 key购买 nike

嗨,我有一个具有多种方法的类,其中我需要在所有方法中使用同步块(synchronized block),如下所示:

public class Test2 {
private Object mutex=new Object();
private OtherClass obj=new OtherClass();

public void method1(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}

public void method2(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}

public void method3(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}

public void method4(){
//do some stuff
synchronized (mutex) {

obj.//some method
//do some stuff
}
//do other stuff
}
}

我使用互斥锁来同步块(synchronized block),所以如果使用 method1 时会发生什么,另一个 method2 同步块(synchronized block)会等待,直到流从同步块(synchronized block)中出来方法1

我不希望这种情况发生,那我该怎么办?我知道,由于我对所有方法都使用互斥锁,因此它会锁定 method2 同步块(synchronized block)。我想知道我应该做什么来删除这个?我应该为每个要使用的方法创建成员变量,还是有其他方法可以解决这个问题?

我希望另一个线程仅在调用相同的方法时等待。就像如果两个线程类 mehod1 一样,那么第二个线程应该等待。但如果第二个线程调用method2,它不应该等待。

最佳答案

根据您的评论判断,我假设您想要按方法同步而不是按对象同步。在这种情况下,最简单的方法是为每个方法声明一个单独的监视器对象,即 mutex1mutex2 等。

关于java - 同步块(synchronized block)问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11261873/

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