java中多线程的共享数据

时间:2011-06-16 15:36:16

标签: java multithreading real-time

当我在android上编写一个用于实时监控ecg的程序时,我遇到了问题。 ecg数据由udp实时传输到移动设备。在移动设备中,有2个线程:一个线程获得ecg数据传输,一个线程绘制ecg数据。 Cicurlar缓冲区是上面两个线程的常见数据,两个线程总是在读取和写入缓冲区时会产生混淆。结果是心电图丢失或缓慢。 在用户cicurlar缓冲区之前,我使用了5个linkedblockingqueu但结果是相同的。

我的程序中是否有人能为我提供多线程数据的解决方案? 谢谢。

抱歉,我的英语不好。!

当我使用linkedblockingqueue时有模型: enter image description here

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  

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

来自JavaDoc的BlockingQueue

  

BlockingQueue实现是   线程安全的。所有排队方法   用原子方式实现它们的效果   内部锁或其他形式的   并发控制。但是,批量   收集操作addAll,   containsAll,retainAll和removeAll   不一定要执行   原则上除非另有说明   在实施中。就是这样   例如,对于addAll(c)   之后失败(抛出异常)   只添加c中的一些元素。

答案 2 :(得分:0)

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