我有一个预定的方法调用,它在预定的时间调用以下方法:
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
通过第一个对象并不完整。
澄清:
对类对象进行同步,这足以避免在完成之前创建另一个类:
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(使用前将#替换为@)