我的Android应用程序中有三个服务被两个广播接收器触发。前两个写入文件并由一个广播接收器触发,因此我可以确保它们一个接一个执行(通过Context.sendOrderedBroadcast()
)。第三个是独立的,由一个单独的广播接收器触发,但是从前一个写入的同一个文件中读取。并发Android服务之间的资源共享或文件锁定
由于广播接收器可能会在同一时间或几乎同时被触发,因此该文件也可能被同时访问。我怎样才能防止这种情况发生?我希望能够先读取然后写入或写入然后读取。我只是不确定这个问题是否与Java并发性相似,因为如果我没有弄错,android服务是完全不同的野兽。
我不太确定这两者中的哪一个都是很好的解决方案。 1)'.lock'文件的创建可能需要比服务本身已经能够访问文件更多的时间。 2)我只是试过了,显然它不会工作:http://stackoverflow.com/questions/12616975/how-to-start-concurrent-threads-that-acquire-a-file-lock-and-等待彼此 –
@mattquiros感谢您的反馈意见 - 如果您找到了更好的方法,请随时添加您自己的答案(并接受它)。 – assylias
不幸的是,我还没有,虽然我被告知要看'ReentrantLock'。类似于您的建议但可与其他线程重复使用的内容。 –