gpt4 book ai didi

java - 监听数据,while(true) 是正确的解决方案吗? java

转载 作者:搜寻专家 更新时间:2023-11-01 02:24:14 24 4
gpt4 key购买 nike

我遇到了一个问题,希望这里有人能帮助我。现在,我在我的程序中使用了太多的 while(true) 循环,所以它运行起来有点慢。

我不确定我的代码是否有问题,或者这是否是唯一的解决方案。

有一个类从另一个类接收数据( double )。想要启动一个 while 循环,它只应在数据不为 0 时运行。我这里有一些代码:

while (true) {
while (kWh != 0) {
try {
queue.put(kWh);
} catch (InterruptedException e) {
System.out.println("Could not put data into queue");
}
kWh = 0;
}
}





@Override
public void SendPower(double power_data) throws RemoteException {
ReceivePowerData.kWh = power_data;
}

如您所见,当 SendPower 方法运行时,kWh 变量得到更新。当此变量不为 0 时,我希望 while 循环运行并将值插入队列。我的问题是我正在使用 while(true) 所以它会一直运行该循环,即使没有收到任何数据,这是一种浪费。

我还能做什么?有什么想法吗?

更新

我试过使用 wait();方法,这似乎工作,它等待..但我不知道我应该如何实现 notify();应该重新启动它的方法。

代码:

synchronized (this) {
System.out.println("Wait for response from sensor");
try {
wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("Continue");

while (kWh != 0) {
try {
queue.put(kWh);
} catch (InterruptedException e) {
System.out.println("Could not put data into queue");
}
kWh = 0;
}

}

然后我尝试在方法中对其进行编码,但我真的认为这是错误的..

@Override
public void SendPower(double power_data) throws RemoteException {
ReceivePowerData.kWh = power_data;

synchronized (this) {
notify();
}

}

所以当从另一个程序调用 SendPower 方法时,它应该运行,然后它应该启动,但这不起作用..我关闭了吗?

最佳答案

您可以使用观察者模式。 Java 具有实现它的标准接口(interface)。

Java 中有大量关于此模式的教程

http://en.wikipedia.org/wiki/Observer_pattern http://www.tutorialspoint.com/design_pattern/observer_pattern.htm

这是一个非常简单的例子。

import java.util.Observable;
import java.util.Observer;
import java.util.Random;

public class ObserverPattern {
private static class PowerObserverable extends Observable implements Runnable {

public void run() {
Random random = new Random();
for (int x = 0; x < 10; x++) {
double kwh = random.nextDouble() * 4;
setChanged();
notifyObservers(kwh);
}
}
}

// Make sure this class is thread safe
private static class PowerObserver implements Observer {
@Override
public void update(Observable o, Object kwh) {
System.out.println(kwh);
}
}

public static void main(String[] args) {
PowerObserverable observerable = new PowerObserverable();
observerable.addObserver(new PowerObserver());

new Thread(observerable).start();
}
}

关于java - 监听数据,while(true) 是正确的解决方案吗? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com