我在规划阶段有一个非gui应用程序,它将作为RS485网络上从设备的控制器。每个从设备都是可寻址的,可以做简单的事情,比如在简单的LCD屏幕上显示文本,接受键盘上的文本,甚至是不同类型的读卡器。这些设备除非说到"否则不会说话。通信方法,即控制器在“电线”上轮询每个设备。
因此,只有一个通信点,一个到RS485转以太网转换器设备的TCP插座。
我过去曾写过类似的东西,但这是在事件驱动之前,也没有任何线程。我们在这里谈论System V Unix。 : - )
所以,我已经搞乱了Java中的线程,并在这里进行一些研究。找到有关Observable类和Observer接口的信息。看起来对我很好,但为什么我想在可寻址时通知我的所有观察者?如果我使用多线程方法,我不想用我们不适用的数据唤醒所有线程。
所以我的问题是:这是一个更好的方式去这里? Observable / Observer非常简单,可以让我马上上去,但是对于所有线程/观察者来说,不得不为不适合他们的消息唤醒它们似乎是浪费,即使这是一个简单的使用问题。 '如果'用于测试传入对象的语句' this'。是否更好地实现AWT ActionListener方法或从EventObject开始?还有什么?
答案 0 :(得分:0)
我认为应用程序中接收客户端请求并决定联系哪个设备的部分不需要多线程。当然,您可以使用awt ActionListener,但它也很容易滚动您自己的事件循环。
至于与设备本身的通信,如果它很慢,它可能在单独的线程(工作线程)中发生,因此它不会阻止事件循环。您通常会使用支持线程池的ExecutorService。
发回响应将直接从工作线程发送响应数据,或者它可能会返回到将其发送回客户端的事件循环。
客户端现在可以实现为同步,等待响应,或异步,立即返回,通常是一个Future对象,可以在以后轮询结果。
同时检查Disruptor模式,如果使用正确,它可以提供快速的线程间消息传递,而且开销很小。