如何";暂停“;在Java中状态发生变化之前,应用程序是否正常运行?
我必须“暂停”我的应用程序,直到套接字接收到来自其他应用程序的特定消息如何";暂停“;在Java中状态发生变化之前,应用程序是否正常运行?,java,Java,我必须“暂停”我的应用程序,直到套接字接收到来自其他应用程序的特定消息 public class Status { public static boolean ready = false; } public class Application { public void method() { // do job // wait other app is ready while(Status.ready == false)
public class Status {
public static boolean ready = false;
}
public class Application
{
public void method()
{
// do job
// wait other app is ready
while(Status.ready == false)
{
// do nothing
// [[ 1 ]]
}
// continue
}
}
public class SocketImpl extends Thread
{
...
// It is expected that the other program is ready
public void run()
{
// receive some msg
// if it's ready message
Status.ready = true;
}
}
好吧,我想你明白我在做什么了,现在有两个问题
System.out.println(Status.ready)
替换/[[1]]]
添加
println
允许while
检测状态变化。为什么?我无法解释这一点。这种繁忙的等待方式并不好。您应该实现观察者模式,这样当SocketImpl有消息时,它会通知其连接的观察者
首先定义一个观察者接口:
interface SocketObserver {
public void MessageReceived(Object aMessage);
}
其中,aMessage可能是保存消息数据的自定义类的实例
然后在SocketImpl中定义一个观察者(可以使用arraylist支持muliple)
然后,在启动线程之前,请设置observer属性
SocketImpl socket = new SocketImpl();
socket.setObserver(new SocketObserver() {
@Override
public void MessageReceived(Object message) {
//Message received do something with it
}
});
socket.start();
您可以在此处看到实现观察者模式的更多信息:
这种繁忙的等待方式并不好。您应该实现观察者模式,这样当SocketImpl有消息时,它会通知其连接的观察者 首先定义一个观察者接口:
interface SocketObserver {
public void MessageReceived(Object aMessage);
}
其中,aMessage可能是保存消息数据的自定义类的实例
然后在SocketImpl中定义一个观察者(可以使用arraylist支持muliple)
然后,在启动线程之前,请设置observer属性
SocketImpl socket = new SocketImpl();
socket.setObserver(new SocketObserver() {
@Override
public void MessageReceived(Object message) {
//Message received do something with it
}
});
socket.start();
您可以在此处看到实现观察者模式的更多信息:
不,这不是一个好方法——它被称为忙等待。你可能想使用某种通知。好吧,关于这种方法,它真的很难看。考虑到这一点,即使这是一个糟糕的方法,问题2呢?我特别要求它,我怀疑这是一个错误的方法。看到你可以考虑一个或一个,但<代码>观察员<代码>模式会更好。方法是丑陋的,但这是一些测试,这就是为什么我没有实现某种观察者模式,易失性关键字是解决方案,这不是一个好方法——它被称为忙等待。你可能想使用某种通知。好吧,关于这种方法,它真的很难看。考虑到这一点,即使这是一个糟糕的方法,问题2呢?我特别要求它,我怀疑这是一个错误的方法。看到你可以考虑一个或一个,但<代码>观察员<代码>模式会更好。方法是丑陋的,但这是一些测试,这就是为什么我没有实现某种观察者模式,易失性关键字是解决方案。