在我的应用程序中,我需要使用NfcA.transceive()执行多个NFC-A标记读取
此外,应用程序需要执行与不同读取数据相关联的慢速API调用
因此,我在单独的线程上运行Callables来处理各种read-> API任务。
这是一种安全的方法吗?收发注释字符串表示
这是一个I / O操作,将阻塞直到完成。
这是否确保我对收发(来自不同线程)的调用不会相互干扰?
答案 0 :(得分:1)
是的,根据其他线程将等待的文档,但是您应该知道以下内容:
public void close ()
还导致其他线程上的所有阻塞I / O操作被取消并返回IOException
因此,如果任何线程调用close()
,它将导致所有其他等待线程接收IOException。你怎么知道哪个线程是最后一个才能正确调用close()
?如果标签在所有线程完成之前超出范围会发生什么?
我会提出一种替代方法,在单个线程中按顺序执行所有读取/收发操作,当每个操作完成时,将数据放入队列以供另一个线程池处理,然后再继续进行下一个收发操作。这可以避免阻塞,如果标签超出范围等,也可以更快,更容易地处理清理