等待dns查找时多线程或观察者模式?

时间:2010-09-24 12:08:49

标签: java multithreading dns observer-pattern

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

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

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

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

事先感谢 - 丹尼斯

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

另一方面,如果您使用同步(阻塞)网络呼叫,那么进行网络I / O(特别是如果它只是一次DNS查询)要容易得多。

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

答案 2 :(得分:0)

由于它是一个正在进行呼叫的GUI,我认为最好将呼叫卸载到不同的字符串。实际上,您希望确保不使用AWT-Thread进行阻止GUI刷新的调用。我建议使用类似ExecutorService之类的命令来执行命令,然后在返回时使用SwingUtilities并调用invokeLater(Runnable doRun)方法以响应更新GUI。