gpt4 book ai didi

java - 在创建新对象后控制方法调用的调用

转载 作者:搜寻专家 更新时间:2023-11-01 02:35:54 24 4
gpt4 key购买 nike

我有一个预定的方法调用,它在预定的时间调用以下方法:

private void doSomething(Map<String, String> someArguments) throws CustomException {
MyEnum runType = getRunType(someArguments);
switch (runType) {
case FRUIT:
new FruitClass().workNow();
break;

case VEGETABLE:
new VegetableClass().workNow();
break;

default:
// log that the type is not known
}
}

workNow 的方法签名如下:

workNow() throws CustomException

workNow 方法运行几分钟并完成一些工作。我的问题是,当 FRUIT(或 VEGETABLE)的一个 workNow 正在进行时,另一个调用发生在相同类型(FRUIT 例如),它创建一个新的 FruitClass 实例并开始并行执行它的 workNow

我如何控制这种行为?我希望通过第二个对象进行的第二次调用要等到通过第一个对象的第一个 workNow 未完成。

澄清一下:

  • 并行调用 FRUITVEGETABLE 没问题。我想控制相同类型的并行调用。两个或多个 FRUIT 或两个或多个 VEGETABLE

  • 我无法将 FruitClassVegetableClass 设为单例。我需要一些围绕 new 的包装代码来按我想要的方式工作。

最佳答案

在类对象上进行同步,这足以避免在完成之前创建另一个类:

private void doSomething(Map<String, String> someArguments) {
MyEnum runType = getRunType(someArguments);
switch (runType) {
case FRUIT:
synchronized (FruitClass.class){
new FruitClass().workNow();
}
break;

case VEGETABLE:
synchronized (VegetableClass.class){
new VegetableClass().workNow();
}
break;

default:
// log that the type is not known
}
}
类对象上的

synchronized 使用类实例作为监视器。类对象实际上是一个单例(在运行时表示类元数据的对象),这个 block 中只能有一个线程。

关于java - 在创建新对象后控制方法调用的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52943068/

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