首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中多线程的共享数据

java中多线程的共享数据
EN

Stack Overflow用户
提问于 2011-06-16 23:36:16
回答 3查看 1.8K关注 0票数 1

当我在android上编写实时心电监测程序时,我遇到了一个问题。通过udp协议将心电数据实时传输到手机上。在手机中,有两个线程:一个线程获取心电数据的传输,一个线程提取心电数据。循环缓冲区是上面两个线程的公共数据,并且两个线程在读取和写入缓冲区时总是会混淆。其结果是心电图丢失或变慢。在用户环路缓冲区之前,我已经使用了5个链接块队列,但结果是相同的。

有没有人能给我一些解决我程序中多线程数据的方法?谢谢。

对不起,我的英语不太好。!

当我使用linkedblockingqueue时,有一个模型:

EN

回答 3

Stack Overflow用户

发布于 2011-06-16 23:40:57

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

票数 1
EN

Stack Overflow用户

发布于 2011-06-16 23:38:57

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

线程主要通过共享对字段和引用字段引用的对象的访问来进行通信。这种形式的通信非常高效,但会导致两种类型的错误:线程干扰和内存一致性错误。防止这些错误所需的工具是同步。

从JavaDoc的BlockingQueue

BlockingQueue实现是线程安全的。所有队列方法都使用内部锁或其他形式的并发控制自动实现它们的效果。但是,除非在实现中另有指定,否则不一定以原子方式执行批量收集操作addAll、containsAll、retainAll和removeAll。因此,例如,在仅添加了c.

中的一些元素之后,addAll(c)就有可能失败(抛出异常)

票数 0
EN

Stack Overflow用户

发布于 2011-06-17 00:37:11

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6374513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档