我想调用两个方法,但是我想一次只调用其中一个。
下次我要调用以前未调用过的方法时,使用 Round Robin 技术
示例:
void mainMethod(){
Obj val;
if(somthing)
val = implMethod1();
else{
val = implMethod2();
}
}
使用if语句是可以做到的事情。 但是,有什么可以用来实现相同目标的 吗?
答案 0 :(得分:3)
您可以将AtomicBoolean用于线程安全 Round Robin :
AtomicBoolean roundRobin = new AtomicBoolean(false);
void mainMethod(){
Object val;
if (roundRobin.compareAndSet(false, true)) {
val = implMethod1();
} else {
val = implMethod2();
roundRobin.set(false);
}
}
一个布尔值,可以自动更新。
答案 1 :(得分:2)
只需在您的对象中声明一个布尔变量:
public class MainClass {
private boolean useMethod1 = true;
public void mainMethod() {
if (useMethod1) {
method1();
} else {
method2();
}
useMethod1 = !useMethod1;
}
}
如果您不想实例化一个对象,并且希望在线程安全添加之前将其安全地同步到mainMethod()上,则可以在static中执行相同的操作
答案 2 :(得分:1)
我对问题的理解不正确:
WARNING! The target-entity Shopware\Models\Attribute\ArticleNotification cannot be found in 'Shopware\Models\Article\Notification#attribute'. in /var/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php
In MappingException.php line 762:
The target-entity Shopware\Models\Attribute\Shop cannot be found in 'Shopwa
re\Models\Shop\Shop#attribute'.
sw:plugin:refresh
ERROR: Job failed: exit code 1
答案 3 :(得分:1)
static int count = 0;
void mainMethod(){
Obj val;
if(somthing && count%2 == 0)
val = implMethod1();
else{
val = implMethod2();
}
count ++;
}
您可以尝试上面的代码。
答案 4 :(得分:0)
假设某事是boolean
变量,则可以使用以下策略来实现:
void mainMethod(){
Obj val;
if(somthing)
val = implMethod1();
somthing=false;
else{
val = implMethod2();
somthing=true;
}
}
答案 5 :(得分:0)
private static boolean check = true;
void mainMethod() {
Obj val;
if(check) {
val = implMethod1();
check = !check;
} else {
val = implMethod2();
check = !check;
}
}
这可能会对您有所帮助。
答案 6 :(得分:0)
您可以使用队列:
初始化队列:
import java.util.LinkedList;
import java.util.Queue;
....
Queue<String> methodQueue = new LinkedList<>();
methodQueue.add("implMethod1");
在您的方法中使用队列:
void mainMethod(methodQueue){
somthing = methodQueue.poll()
Obj val;
if(somthing.equals('implMethod1'))
val = implMethod1();
methodQueue.add('implMethod2')
else{
val = implMethod2();
methodQueue.add('implMethod1')
}
}