java中多线程共享数据

发布于 2024-11-15 21:59:42 字数 348 浏览 1 评论 0原文

当我在android上编写实时心电图监测程序时遇到问题。 心电数据通过udp实时传输到手机。在移动设备中,有两个线程:一个线程获取传输的心电图数据,一个线程绘制心电图数据。 循环缓冲区是上面两个线程的公共数据,两个线程在读写缓冲区时总是会发生冲突。结果是心电图丢失或缓慢。 在使用循环缓冲区之前,我使用了 5 个 linkedblockingqueu 但结果是相同的。

任何人都可以为我的程序中的多线程数据提供一些解决方案吗? 谢谢。

抱歉,我的英语不好。!

我使用linkedblockingqueue时有模型: 在此处输入图像描述

i have a problem when i write a program on android for monitoring ecg real time.
Ecg data is transfered to mobile in real time by udp. In mobile, there have 2 thread: a thread gets ecg data transfered, a thread draws the ecg data.
Cicurlar buffer is common data for two thread above, and two threads always confict when read and write to buffer. And result is that ecg is lost or slow.
Before user cicurlar buffer, i had used 5 linkedblockingqueu but result was same.

Can any one give me some solution for data for multithread in my program?
Thank you.

Sorry, my english is not good.!

there is model when i used linkedblockingqueue:
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萤火眠眠 2024-11-22 21:59:42

您需要使用共享锁来同步对数据的访问。如果您想真正了解 Java 中的线程和并发模型,我强烈推荐 Java 并发实践

You need to synchronize access to your data using a shared lock. I highly recommend Java Concurrency in Practice if you want to truly understand threading and concurrency models in Java.

安穩 2024-11-22 21:59:42

我认为, 同步 是您的问题的解决方案。

线程主要通过以下方式进行通信
共享对字段和
对象引用字段引用。
这种沟通形式是
效率极高,但可以使两个
可能出现的错误类型:线程
干扰和记忆一致性
错误。需要防止的工具
这些错误是同步的。

来自 JavaDoc 的 BlockingQueue

BlockingQueue 实现是
线程安全。所有排队方式
使用原子方式实现其效果
内部锁或其他形式的
并发控制。然而,大部分
集合操作addAll,
containsAll、retainAll 和 removeAll
不一定执行
除非另有说明,否则以原子方式
在一个实现中。原来如此
可能,例如,对于 addAll(c)
之后失败(抛出异常)
仅添加 c 中的部分元素。

I think, Synchronization is the solution for your problem.

Threads communicate primarily by
sharing access to fields and the
objects reference fields refer to.
This form of communication is
extremely efficient, but makes two
kinds of errors possible: thread
interference and memory consistency
errors. The tool needed to prevent
these errors is synchronization.

From the JavaDoc's BlockingQueue

BlockingQueue implementations are
thread-safe. All queuing methods
achieve their effects atomically using
internal locks or other forms of
concurrency control. However, the bulk
Collection operations addAll,
containsAll, retainAll and removeAll
are not necessarily performed
atomically unless specified otherwise
in an implementation. So it is
possible, for example, for addAll(c)
to fail (throwing an exception) after
adding only some of the elements in c.

栀子花开つ 2024-11-22 21:59:42

在我的假设中,您直接访问集合(基于任何 Fifo),您必须尝试创建一个 bean,该 bean 应该具有用于​​数据而不是集合的 getter 和 setter,并且集合应该在 bean 中定义。您可以在创建线程对象之前创建 bean 对象,并在构造时将 bean 对象传递给线程,希望这对您有用。

In my assumption you are directly accessing the collection (Any Fifo based), you must try to make a bean which should have getter and setters for data not for collection and the collection should be define in bean. you can create the bean object before you create thread objects and pass the bean object to threads at contructing time, hope this will you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文