仅在条件为真后执行

时间:2014-07-20 01:22:10

标签: java asynchronous wait execution

我有一个我在下面粘贴的java代码:

    package lreal.server;

import fb.datatype.LREAL;
import fb.rt.AbstractEvent;
import fb.rt.EventServer;
import fb.rt.FBRManagementException;
import fb.rt.net.SERVER;
import java.util.*;

public class Double5 {

public SERVER server = new SERVER(0, 1); // creating a server

static LREAL rd1 = new LREAL(); // the variable in which the value received
                                // from client is stored
// it is initialized to zero on declaration.
public double m;



public Double5() {
    // initialize the service / server
    server.QI.value = true;
    server.ID.value = "10.0.0.3:4410";
    server.INIT.serviceEvent(null);

    try {
        // establishing connection to the client.
        server.connectOV("RD_1", rd1);
    } catch (FBRManagementException e1) {
        e1.getMessage();
    }

    // Set up output event handling
    final EventServer initoServer = new AbstractEvent() {
        @Override
        public void serviceEvent(EventServer e) {

            System.out.println("INITO(QO=" + server.QO + ",STATUS= "
                    + server.STATUS + "RD_1= " + rd1);



        }
    };
    server.INITO.connectTo(initoServer);

    server.IND.connectTo(new AbstractEvent() {
        @Override
        public void serviceEvent(EventServer e) {
            initoServer.serviceEvent(e);

            System.out.println("INDICATE(QO=" + server.QO + ",STATUS= "
                    + server.STATUS + "RD_1= " + rd1.value);
            m = rd1.value;


            System.out.println(" value recived inside is " + rd1);

            server.QI.value = false;
            server.INIT.serviceEvent(null);

        }

    });





}

public static void main(String[] args) {
    Double5 demo1 = new Double5();
    synchronized (demo1) {
        while (demo1.m == 0) {
            try {

                System.out.println(" zero value received");
                demo1.wait();
            } catch (InterruptedException e2) {
                e2.getMessage();
            }

        }
        System.out.println(demo1.m);
        demo1.notify();

    }
}

}

这是我得到的输出:

 zero value received
INITO(QO=true,STATUS= "OK"RD_1= 45.65
INDICATE(QO=true,STATUS= "OK"RD_1= 45.65
 value recived inside is 45.65
INITO(QO=false,STATUS= "TERMINATED"RD_1= 45.65

本程序的基本功能是创建一个接受客户端值的服务器。接收的值存储在类LREAL()的实例rd1中。运行此代码后,我初始化另一个软件FBDK上的客户端。编码用于与该软件通信。

首先执行initoserver然后执行indserver。

我怀疑的是:我写了一个声明为m = rd1.value。 value的类型为double。当我运行这个程序时,m被存储为零。它应该具有客户发送的值(在这种情况下:45.65)。我想知道在main方法中初始化对象demo1之后是否有阻止执行print语句的方法,直到45.65的值存储在m中。我希望异步这样做。我查看了wait和notify方法,但不确定它们是否可以按照我在这种情况下使用的方式使用,因为我想在同一个类中控制执行。谢谢。

1 个答案:

答案 0 :(得分:0)

我现在尝试使用while循环并且它有效。我能够解决它。猜猜我没有必要深入同步。结果比这更简单。无论如何,感谢您的所有帮助和见解。欣赏它。

public static void main(String[] args) {
    Double5 demo1 = new Double5();

while (demo1.m==0)
{
System.out.println(" zero value received");
}


System.out.println(" value received is "+ demo1.m);     


}