gpt4 book ai didi

Java:观察者或synchronized+notify()对串口传入数据

转载 作者:行者123 更新时间:2023-12-01 05:52:46 25 4
gpt4 key购买 nike

我有一个有数据传入的串行端口。我使用串行端口事件监听器实现了与 RXTX 库的串行端口连接。因此,只要串行端口中有可用的传入数据,同步函数serialEvent(SerialPortEvent oEvent)就会运行。基本上,随着数据不断传入,程序将处于无限循环中。我将传入的数据组织成一个整数数组。现在我希望与其他类共享该数组,这些类将使用该数组来执行不同的任务。我可以说,随着串行事件监听器在循环中运行并且数组不断变化,我希望所有其他类共享这个更改后的数组数据。我之前学过一些关于 java.util.observables 的知识。而且当我在网上搜索时,我看到其他人使用sychronized()和notify()/notifyAll()在线程之间共享变量。

我不确定其中哪一个最好用?如果它们都适用于这种情况,那么我需要注意的最重要的部分是什么?还有其他方法可以达到我想要的吗?

最佳答案

如果没有有关您的申请的其他信息,很难判断。当你说“其他类”时,你的意思是“其他线程”吗?

如果你的其他类是线程并且你希望它们等待新数据,你可以让它们 wait()并拥有串行端口事件监听器 notifyAll()每当有新数据可用时。这将唤醒正在等待的线程。但请注意,这只能解决通知问题:您仍然需要处理对数据数组的并发访问,因为在其他线程访问新数据时可能会到达新数据。

另一方面,如果您使用 Observable ,那么当您调用Observable.notifyObservers()时,这将导致 update()每个的方法Observer被调用,全部在当前线程的上下文中(正在调用 Observable.notifyObservers() 的线程)。如果您希望其他线程访问数据,您仍然需要某种方式来通知它们(例如,您的 update() 方法可能最终实际调用 notify() )。

如果您提供有关您正在尝试执行的操作的更多信息,我们也许能够为您提供进一步帮助。

关于Java:观察者或synchronized+notify()对串口传入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4105000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com