java Android USB附件多线程
我有一个由多线程和安卓开放附件引起的问题
我需要与USB附件通信,但我需要从两个线程进行通信。一个线程生成并发送数据,另一个线程读取数据
为什么我不用一根线?因为在读之前可能会有一次或多次写操作,并且读操作被阻塞,所以这不是一个选项
如果使用多个线程,我迟早会遇到“I/O错误(没有这样的设备)”,因为读与写之间会发生冲突;同时执行的写操作
锁定或多或少会让我回到单线程的状态,所以不太好
不支持
input-stream
返回的.available()
方法,因此在执行读取之前,我无法检查是否有可用的内容因为它不是基于socket的流,所以我也不能设置超时
我试着从
USBAccessory
获取FileDescriptor
并传递给JNI
在那里处理它,但在第一次读/写之后,设备变得不可访问
需要的问题/建议:
对此,建议/最佳实践方法是什么?我不需要编写代码,我只需要一些关于如何解决这个问题的指导
澄清一下:
另一端的软件可能会也可能不会响应任何数据。有一些所谓的静默发送是指刚刚收到的数据发送,但没有确认。由于我正在开发的应用程序只是一个代理,我不清楚数据是否会产生答案。这也需要对数据进行分析,目前还没有记录在案
# 1 楼答案
这说明了一切。由于您在不支持并发访问的同一个通道上执行读写操作,因此需要让您的线程等待另一个线程完成读写操作
你的双线程方法或多或少是我会做的。祝你好运,相信自己
# 2 楼答案
当你想同时读写时,如果读和写在同一部分,写总是会导致暂停读
可能您可以遵循与
ConcurrentHashMap
类似的方法,对不同的段使用不同的锁,如果写入在同一段上,则锁定只读,否则允许读取这会
希望有帮助