Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
决定使用哪种Java事件模式/模型_Java_Multithreading_Event Handling - Fatal编程技术网

决定使用哪种Java事件模式/模型

决定使用哪种Java事件模式/模型,java,multithreading,event-handling,Java,Multithreading,Event Handling,我在规划阶段有一个非gui应用程序,它将充当RS485网络上从设备的控制器。每个从设备都是可寻址的,可以做一些基本的事情,比如在一个简单的LCD屏幕上显示文本,接受来自键盘的文本,甚至不同类型的读卡。这些设备有一种“除非被告知,否则不要讲话”的通信方法,这意味着控制器正在“连线”上轮询每个设备 因此,有一个单一的通信点,一个连接到RS485到以太网转换器设备的TCP套接字 我以前也写过类似的东西,但这是在事件驱动之前,也没有线程。我们这里讲的是System V Unix,伙计们。:-) 所以,我

我在规划阶段有一个非gui应用程序,它将充当RS485网络上从设备的控制器。每个从设备都是可寻址的,可以做一些基本的事情,比如在一个简单的LCD屏幕上显示文本,接受来自键盘的文本,甚至不同类型的读卡。这些设备有一种“除非被告知,否则不要讲话”的通信方法,这意味着控制器正在“连线”上轮询每个设备

因此,有一个单一的通信点,一个连接到RS485到以太网转换器设备的TCP套接字

我以前也写过类似的东西,但这是在事件驱动之前,也没有线程。我们这里讲的是System V Unix,伙计们。:-)

所以,我把Java中的线程技术弄得一团糟,在这里四处寻找,做一些研究。了解了Observable类和Observator接口。在我看来没问题,但为什么我要通知我所有的观察者他们是可寻址的?如果我使用多线程方法,我不想用不适用于所有线程的数据唤醒所有线程


所以我的问题是:哪种方式更好?Observable/Observator很简单,可以让我马上启动,但对于所有线程/观察者来说,为了获取不适合他们的消息而醒来似乎是一种浪费,即使使用“if”语句来测试传入对象是否符合“this”。实现AWT ActionListener方法还是从EventObject开始比较好?还有什么?

我认为应用程序中接收客户端请求并决定联系哪个设备的部分不需要多线程。当然,您可以使用awt ActionListener,但也很容易滚动您自己的事件循环

至于与设备本身的通信,如果通信速度慢,则可以在单独的线程(工作线程)中进行,这样就不会阻塞事件循环。您通常会使用由线程池支持的ExecutorService

将响应发送回将直接从工作线程发送响应数据,也可能返回到事件循环,从那里将响应数据发送回客户端

客户机现在可以实现为同步的,空闲地等待响应,或者异步的,立即返回,通常是一个以后可以轮询结果的对象


另外,请查看Disruptor模式,如果使用正确,它可以提供快速的线程间消息传递,并且开销非常小。

听起来您想要一个发布/订阅模式check out JMS,,由Google提供,check out project Reactor: