如何在Java中的方法调用之间交替

时间:2019-03-18 09:45:52

标签: java round-robin

我想调用两个方法,但是我想一次只调用其中一个。

下次我要调用以前未调用过的方法时,使用 Round Robin 技术

示例:

void mainMethod(){
     Obj val;

     if(somthing)
        val = implMethod1();
     else{
        val = implMethod2();
     }
}

使用if语句是可以做到的事情。 但是,有什么可以用来实现相同目标的 吗?

7 个答案:

答案 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')
 }
}