Java 安卓USB附件多线程

Java 安卓USB附件多线程,java,android,multithreading,Java,Android,Multithreading,由于多线程和安卓开放附件引起的头痛 我需要与USB附件通信,但我需要从两个线程进行通信。 一个线程生成并发送数据,另一个线程读取数据 为什么我不使用单线程?因为在读之前可以有1次或更多的写操作,并且读操作被阻塞,所以这不是一个选项 如果使用多个线程,我迟早会遇到I/O错误(没有这样的设备),因为同时执行的读写操作会发生冲突 锁定或多或少会让我回到单线程的状态,所以不太好 .available()输入流上的返回方法不受支持,因此在执行读取之前,我无法检查是否有可用的内容 因为它不是基于套接字的流

由于
多线程
安卓开放附件
引起的头痛

我需要与USB附件通信,但我需要从两个线程进行通信。 一个线程生成并发送数据,另一个线程读取数据

  • 为什么我不使用单线程?因为在读之前可以有1次或更多的写操作,并且读操作被阻塞,所以这不是一个选项

  • 如果使用多个线程,我迟早会遇到
    I/O错误(没有这样的设备)
    ,因为同时执行的读写操作会发生冲突

  • 锁定或多或少会让我回到单线程的状态,所以不太好

  • .available()
    输入流上的
    返回方法不受支持,因此在执行读取之前,我无法检查是否有可用的内容

  • 因为它不是基于套接字的流,所以我也不能设置超时

  • 我已尝试从
    USBAccessory
    获取
    FileDescriptor
    ,并将其传递到
    JNI
    进行处理,但在第一次读/写之后,设备变得无法访问

需要的问题/建议:
对此,建议/最佳实践方法是什么?我不需要编写代码,我只需要一些关于如何处理这个问题的指导

澄清:
另一端的软件可能会也可能不会响应任何数据。有一些所谓的静默发送是数据发送,它只是接收,但没有确认。由于我正在使用的应用程序只是一个代理,我不清楚数据是否会产生答案。这也需要对数据进行分析,而目前还没有对数据进行分析


谢谢。

由于您想同时进行读写操作,如果读写操作在同一部分,那么写操作总是会导致暂停阅读

可能您可以遵循与
ConcurrentHashMap
类似的方法,对不同的段使用不同的锁,如果写入在同一段上,则锁定只读,否则允许读取

这将

  • 在大多数情况下,避免在写入期间阻塞读取
  • 避免碰撞和碰撞
  • 绝对不会是单线程方法
  • 希望有帮助

    如果使用多个线程,我会遇到I/O错误(没有这样的设备) 迟早,因为我会在读写之间发生冲突 同时被执行

    这说明了一切。由于您在不支持并发访问的同一通道上执行读写操作,因此需要让您的线程等待,直到另一个线程完成读写操作


    你的双线程方法或多或少是我会做的。祝你好运,相信你自己。

    如果你没有描述你使用的API的限制,你很难给出建议。