我遇到了一个问题,希望这里有人能帮助我。目前,我在我的程序中使用了太多的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 方法时,它应该运行,并且应该启动,但是这并没有起作用...我接近了吗?
SynchronousQueue
http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/SynchronousQueue.html - Alex Salauyou