2015-09-16 39 views
2

我想编写两个Android应用程序,它们在单个文本文件上工作。两个应用程序之间的相互排斥

第一个应用程序(应用)的任务 -

A.检查文本文件“的abc.txt”是否出现在SD卡的根目录。 B.如果不存在,则在sdcard的根目录下创建“abc.txt”。

C.每5分钟后定期将数据写入abc.txt。

第二个应用程序(应用)的任务 -

A.检查文本文件“的abc.txt”是否出现在SD卡的根目录。

B.如果存在,读取所有从文件“的abc.txt”,后读数据,删除它

现在我可以通过读取和写入“的abc.txt”独立每个应用程序,但我面临的同步问题。我想确保,如果第一个应用程序正在写入文本文件,第二个文件必须等待文本文件准备好读取。我会用

synchronized 

关键字它是一个单一的应用程序。有人可以帮助我在这种情况下?

+0

虽然有点太宽泛,但我会给你一些想法:你明显需要一个外部同步机制。怎么样_locking file_ - 例如“abc.txt.lock”?这两个应用程序都应该在完成工作时创建这样的文件,然后再删除它。这两个应用程序也应该检查该文件的存在。 – Seelenvirtuose

+0

@darthvading:请从Kathy Sierra的scjp书中查看'Synchronizing Code(Objective 4.3)'。你会发现在哪里使用Synchronized word .. !! – AndiGeeky

+0

@darthvading:检查这一个:http://firozstar.tripod.com/_darksiderg.pdf。 – AndiGeeky

回答

0

FileLock应该提供您需要的功能。您可以锁定abc.txt,也可以锁定其他文件,该文件始终存在,并且仅用作应用程序的系统范围锁定。

从DOC:

多个进程可以保持上的文件的相同区域共享锁,但是只有一个单一的过程可在一个文件的给定区域,没有其他持有的排他锁进程可以同时持有与独占锁重叠的共享锁。

您可以从FileChannel获得对整个文件的独占FileLock