【问题标题】:Multithreading or observer pattern when waiting for dns lookup?等待dns查找时的多线程或观察者模式?
【发布时间】:2011-04-16 18:13:13
【问题描述】:

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

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

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

所以,新线程或观察者。也感谢一些关于这些主题的好链接。

在此先感谢 - 丹尼斯

【问题讨论】:

    标签: java multithreading dns observer-pattern


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      另一方面,如果您使用同步(阻塞)网络调用,则执行网络 I/O(特别是如果它只是一次 DNS 查找)会容易得多。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • +1。我们有一个应用程序进行了大量的 DNS 查找,尤其是在启动时。我们使用观察者模式并让线程池处理查找。
        猜你喜欢
        • 2012-02-03
        • 1970-01-01
        • 2013-03-05
        • 2015-01-28
        • 1970-01-01
        • 2013-12-02
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多