我的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'。類似於您的建議但可與其他線程重複使用的內容。 –