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