Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sockets_Nio - Fatal编程技术网

Java:收到传入数据包的通知

Java:收到传入数据包的通知,java,sockets,nio,Java,Sockets,Nio,我正在开发一个目前使用标准tcp套接字的库。my library的最终用户将自己注册为侦听器,并且需要在收到相关消息时得到通知 如果我在我的库中生成了一个工作线程,则会出现线程死亡问题,在这个问题中,我的库可能会阻止应用程序在所有用户线程都死亡时正常终止 有没有一种方法可以在不产生新线程或不要求用户轮询库的情况下通知我新传入的tcp数据包 谢谢 将工作线程注册为“守护进程”,告诉JVM它不必等待线程退出 )将工作线程注册为“守护进程”,告诉JVM它不必等待线程退出 )我不知道套接字部分,但如果在

我正在开发一个目前使用标准tcp套接字的库。my library的最终用户将自己注册为侦听器,并且需要在收到相关消息时得到通知

如果我在我的库中生成了一个工作线程,则会出现线程死亡问题,在这个问题中,我的库可能会阻止应用程序在所有用户线程都死亡时正常终止

有没有一种方法可以在不产生新线程或不要求用户轮询库的情况下通知我新传入的tcp数据包


谢谢

将工作线程注册为“守护进程”,告诉JVM它不必等待线程退出


)

将工作线程注册为“守护进程”,告诉JVM它不必等待线程退出


)

我不知道套接字部分,但如果在生成线程时将其标记为守护进程线程(setDaemon(true)),则不会停止应用程序退出。

我不知道套接字部分,但如果在生成线程时将其标记为守护进程线程(setDaemon(true)),然后它不会停止应用程序退出。

您可以使用从套接字读取数据的线程。如果工作是CPU受限的,那么只需启动另一个线程来调度事件,就不会有什么好处

另一方面,如果您正在构建一个库,那么当您调用侦听器的方法时,您将无法控制用户将做什么,因此我建议您使用一个内部执行器,并为您的库提供一个类似terminate()的方法。调用侦听器的方法将被委托给runnable,您将提交给执行器(可以是newSingleThreadExecutor、newCachedThreadPool或您认为更合适的任何对象)

这样,用户就知道他们必须调用init()和terminate()——其中init()将初始化执行器,terminate()将负责关闭它。这允许您在库中拥有自己的线程,并防止它们阻止主应用程序关闭


看一下,可能会让您更好地了解我所说的内容。

您可以使用从套接字读取数据的线程。如果工作是CPU受限的,那么只需启动另一个线程来调度事件,就不会有什么好处

另一方面,如果您正在构建一个库,那么当您调用侦听器的方法时,您将无法控制用户将做什么,因此我建议您使用一个内部执行器,并为您的库提供一个类似terminate()的方法。调用侦听器的方法将被委托给runnable,您将提交给执行器(可以是newSingleThreadExecutor、newCachedThreadPool或您认为更合适的任何对象)

这样,用户就知道他们必须调用init()和terminate()——其中init()将初始化执行器,terminate()将负责关闭它。这允许您在库中拥有自己的线程,并防止它们阻止主应用程序关闭

看看,也许能让你更好地了解我在说什么