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

2024-03-08

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

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方法运行几分钟并完成一些工作。我的问题是,当一个workNow for FRUIT (or VEGETABLE) 正在进行,并且另一个调用发生在相同类型 (FRUIT例如),它创建了一个新的FruitClass实例并开始执行它的workNow并行。

我该如何控制这种行为?我希望通过第二个对象的第二次调用等到第一个workNow通过第一个对象并不完整。

澄清:

  • 并行调用FRUIT and VEGETABLE很好。我想控制相同类型的并行调用。两个或更多FRUIT或两个或更多VEGETABLE.

  • 我做不到FruitClass and VegetableClass作为单身人士。我需要一些包装代码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类对象使用类实例作为监视器。 类对象实际上是一个单例(运行时代表类元数据的对象),并且在该块中只能有一个线程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新对象创建后控制方法调用的调用 的相关文章

随机推荐