gpt4 book ai didi

Java:如何创建同步块(synchronized block)以及子类使用的同步块(synchronized block)

转载 作者:行者123 更新时间:2023-12-01 16:32:36 28 4
gpt4 key购买 nike

abstract class A {
protected abstract int isRunning();

public void concreteMethod() {
synchroinzed(isRunning()) {
//do stuff
}
}
}

class B extends A {
int running_ = 0;

public int isRunning() {
return running_;
}
}

我遇到的问题:int 不是同步语句的有效类型参数。我该怎么做?

最佳答案

如果您想阻止 block 和方法 isRunning() 同时执行,则不能完全按照您想要的方式执行,因为同步 无法继承(只有实现才能证明同步的合理性)。

这是您可以做的最近的事情:

class A {
protected Object lock = new Object();
protected abstract int isRunning();
public void concreteMethod() {
synchronized(lock) {
//do stuff
}
}
}

class B extends A {
int running_ = 0;
public int isRunning() {
synchronized(lock) {
return running_;
}
}
}

如果您有能力锁定整个 concreteMethod() 而不仅仅是一个 block ,那么您可以使用简单的解决方案将 synchronized 关键字添加到 concreteMethod isRunning():

class A {
protected abstract int isRunning();
public synchronized void concreteMethod() {
//do stuff
}
}

class B extends A {
int running_ = 0;
public synchronized int isRunning() {
return running_;
}
}

关于Java:如何创建同步块(synchronized block)以及子类使用的同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013395/

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