Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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

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 等待dns查找时使用多线程还是观察者模式?_Java_Multithreading_Dns_Observer Pattern - Fatal编程技术网

Java 等待dns查找时使用多线程还是观察者模式?

Java 等待dns查找时使用多线程还是观察者模式?,java,multithreading,dns,observer-pattern,Java,Multithreading,Dns,Observer Pattern,我正在用java设计一个利用dns查找类的系统 我的问题是,在调用类的dnsLookup()时,是在新线程中执行,还是使用观察者模式并让dns类告诉我何时完成 这不是一个问题,只要查找几乎立即返回一个值,但当它需要几秒钟(当它没有得到响应时),我不想在等待时冻结GUI 所以,新的线程或观察者。欣赏一些关于主题的好链接 事先谢谢-Dennis您的GUI是一个事件驱动程序系统,因此异步通知很好 另一方面,如果您使用同步(阻塞)网络调用,则进行网络I/O(特别是在仅进行单个DNS查找的情况下)要容易得

我正在用java设计一个利用dns查找类的系统

我的问题是,在调用类的dnsLookup()时,是在新线程中执行,还是使用观察者模式并让dns类告诉我何时完成

这不是一个问题,只要查找几乎立即返回一个值,但当它需要几秒钟(当它没有得到响应时),我不想在等待时冻结GUI

所以,新的线程或观察者。欣赏一些关于主题的好链接


事先谢谢-Dennis

您的GUI是一个事件驱动程序系统,因此异步通知很好

另一方面,如果您使用同步(阻塞)网络调用,则进行网络I/O(特别是在仅进行单个DNS查找的情况下)要容易得多


因此,我倾向于选择单独的线程选项,但在完成后,让该线程通知主GUI线程。

您的GUI是一个事件驱动程序系统,因此异步通知很好

另一方面,如果您使用同步(阻塞)网络调用,则进行网络I/O(特别是在仅进行单个DNS查找的情况下)要容易得多


因此,我倾向于选择单独的线程选项,但在完成后,让该线程通知主GUI线程。

您必须同时使用观察者模式和多个线程。DNS调用回调方法无法在同一线程中使用。

您必须同时使用观察者模式和多个线程。无法在同一线程中使用DNS调用回调方法。

由于调用的是GUI,我认为最好将调用卸载到不同的字符串。事实上,您希望确保您没有使用AWT线程进行阻止GUI刷新的调用。我建议使用类似于的方法来执行您的命令,然后在返回时,使用并调用
invokeLater(Runnable doRun)
方法来用响应更新GUI。

由于调用的是GUI,我认为最好将调用卸载到不同的字符串。事实上,您希望确保您没有使用AWT线程进行阻止GUI刷新的调用。我建议使用类似于的方法来执行您的命令,然后在返回时,使用并调用
invokeLater(Runnable doRun)
方法来用响应更新GUI。

+1。我们有一个应用程序做了相当多的DNS查找,特别是在启动时。我们使用观察者模式,让线程池处理查找。我们有一个应用程序做了相当多的DNS查找,特别是在启动时。我们使用观察者模式,让线程池处理查找。