- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通常使用 Observer pattern,虽然我的同事在工作中已经实现了一个使用线程相互通信的观察者(使用 wait
和 notify
/notifyAll
) .
我应该使用模式来实现我的观察者,还是应该使用等待和通知来实现线程间通信?是否有充分的理由避免一种方法而总是使用另一种方法?
我总是选择第一个,使用模式,不符合惯例,因为它看起来更具表现力(涉及的标识符是表达和理解沟通内容以及沟通方式的好方法)。
编辑:
我在 Swing GUI 中使用模式,他在 Android 应用程序中使用线程间解决方案。
在他的解决方案中,一个线程生成数据然后调用notify
,以唤醒另一个线程绘制生成的数据并在每次绘制后调用wait
。
他对 wait
/notify
解决方案的论点是,它创建的线程更少,甚至对 notify
的多个并发调用也只会导致 1 次绘制事件,而基于观察者的解决方案会在每次调用时调用重绘。他说这只是另一种有效的方法,但并未声称他这样做是出于性能原因。
我的论点是,我会在 OO 设计级别表达对象之间的通信,而不是使用使通信几乎不可见的特定于语言的功能。此外,低级线程通信很难掌握,其他读者可能难以理解,而应该在更高级别上实现,即。 e.使用 CyclicBarrier
。对于一种或另一种解决方案,我没有任何合理的论据,但我想知道对于一种或另一种方法是否有任何合理的论据(即 “如果你使用这个,那么这个和那个可能会发生方法,而在另一种方法中这是不可能的。”)。
最佳答案
您正在比较苹果和橙子。等待/通知机制用于线程同步,虽然您的同事可能在 Observer/Observable 实现中使用过它,但它本身并不是模式实现。它只是意味着它是一个多线程实现。
此模式有很多实现,它们通常是根据您的工作环境量身定制的。大多数 UI 框架/工具包中都内置了事件机制。用于分布式环境的 JMS,...
我发现 JDK 提供的通用 Observer/Observable 类用处不大,根据经验,我也没有发现很多其他开发人员使用它们。大多数人会在适当的情况下使用提供的机制,或者在需要时推出他们自己的特定且最终更有用的实现。
由于最近我的大部分编码都是在 OSGi 环境中完成的,所以我更喜欢观察者/可观察对象的变体,称为 whiteboard pattern。 .这对您来说可能可行也可能不可行,具体取决于您的环境。
关于java - 观察者 : Implement with pattern (subject & observer) or inter-thread communication (wait & notify),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7404626/
我有兴趣了解有关 Microsoft Office Communicator 的更多信息IM 客户端,以及它如何确定您的存在(即您是在计算机旁还是不在)。任何人都可以向我指出解释这一点的教程或 API
我正在使用 python。我正在尝试运行一个进程并使用 subprocess.popen 获取输出。阅读周围后,我看到人们使用 communicate()[0] 但那不在文档中,它用于示例。我想知道是
我正在使用 python。我正在尝试运行一个进程并使用 subprocess.popen 获取输出。阅读周围后,我看到人们使用 communicate()[0] 但那不在文档中,它用于示例。我想知道是
我有一些设置和拆卸脚本,它们使用 csrun.exe 为一些自动化测试准备本地计算模拟器。 C:\Program Files\Microsoft SDKs\Azure\Emulator\csrun.e
我想知道对这句名言最接地气的解释是什么: Don't communicate by sharing memory; share memory by communicating. (R. Pike) 在
(所以 this question has been asked before ,但在一般意义上,大多数响应都是在与多个服务器/客户端/等的一般网络通信的上下文中) 在简单的点对点通信协议(proto
我正在尽力将 C++ 模块链接到 python 绑定(bind)。我正在努力实现 boost mpi 通信。我正在将 boost.mpi.world 对象发送到 C++,它需要一个 boost::mp
情况是这样的: 我有一个正在运行的命令: import subprocess foo = subprocess.Popen('ls /', shell=True, stdout=subprocess.
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 5 年前。 Improve
我曾与那些与同龄人在线聊天的人一起工作,他们不断地围绕想法进行讨论。我也曾与那些坚决拒绝并认为这是浪费时间的人一起工作。 在线实时聊天论坛对您特别有用吗?为什么或者为什么不? 在您的公司内部,还是在外
我在一个分为两组的 IT 部门工作。一组开发和管理应用程序,另一组管理公司的基础设施和服务器。我们面临的问题之一是沟通中断。我为应用程序组工作,我遇到的问题之一是当基础设施关闭服务器或刷新数据库时没有
我的团队与 IM 进行了很多交流。我们有时甚至会使用 IM 向在下一个立方体中的人提问。这样做的原因是我们都发现接听 IM 的干扰比说话要少得多。 尽管如此,我发现当我低头编码时,闪烁的消息窗口可能会
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
传输数据时,汉明码显然允许您重新创建已通过线路损坏的数据(纠错码)。 这是如何工作的,它的局限性是什么(如果有的话)? 有没有更好的纠错解决方案(相对于重传)?是否存在重传更好的情况? 最佳答案 让我
我是一名优秀的程序员,十分优秀!