当我在android上编写一个用于实时监控ecg的程序时,我遇到了问题。 ecg数据由udp实时传输到移动设备。在移动设备中,有2个线程:一个线程获得ecg数据传输,一个线程绘制ecg数据。 Cicurlar缓冲区是上面两个线程的常见数据,两个线程总是在读取和写入缓冲区时会产生混淆。结果是心电图丢失或缓慢。 在用户cicurlar缓冲区之前,我使用了5个linkedblockingqueu但结果是相同的。
我的程序中是否有人能为我提供多线程数据的解决方案? 谢谢。
抱歉,我的英语不好。!
当我使用linkedblockingqueue时有模型:
答案 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对象传递给线程,希望你能这样做。