Java 两个应用程序之间的互斥
我想在一个文本文件上编写两个Android应用程序 第一个应用程序的任务(App1)—— A.检查SD卡根目录中是否存在文本文件“abc.txt” B.如果不存在,则在SD卡的根目录下创建“abc.txt” C.每隔5分钟,定期将数据写入abc.txt 第二个应用程序的任务(App2)—— A.检查SD卡根目录中是否存在文本文件“abc.txt” B.如果存在,读取“abc.txt”文件中的所有数据,并在读取后将其删除 现在我可以通过每个应用程序分别读取和写入“abc.txt”,但我面临着同步问题。我想确保,如果第一个应用程序正在写入文本文件,第二个文件必须等待文本文件准备好读取。我会用Java 两个应用程序之间的互斥,java,android,deadlock,synchronized,Java,Android,Deadlock,Synchronized,我想在一个文本文件上编写两个Android应用程序 第一个应用程序的任务(App1)—— A.检查SD卡根目录中是否存在文本文件“abc.txt” B.如果不存在,则在SD卡的根目录下创建“abc.txt” C.每隔5分钟,定期将数据写入abc.txt 第二个应用程序的任务(App2)—— A.检查SD卡根目录中是否存在文本文件“abc.txt” B.如果存在,读取“abc.txt”文件中的所有数据,并在读取后将其删除 现在我可以通过每个应用程序分别读取和写入“abc.txt”,但我面临着同步问
synchronized
如果它是一个单一的应用程序。有人能帮我解决这个问题吗?应该提供您需要的功能。您可以锁定abc.txt,也可以锁定一些其他文件,这些文件将始终存在,并且仅作为应用程序的系统范围锁
来自文档:
多个进程可以在文件的同一区域上持有共享锁,但只有一个进程可以在文件的给定区域上持有独占锁,并且没有其他进程可以同时持有与独占锁重叠的共享锁
您可以从中获取整个文件的独占
文件锁。虽然有点太宽,无法回答,但我会给您一些想法:您显然需要一个外部同步机制。一个锁定文件怎么样?例如“abc.txt.lock”?这两个应用程序都应该在执行其工作时创建这样的文件,然后将其删除。这两个应用程序还应检查该文件是否存在。@DarthLoading:请检查Kathy Sierra的scjp手册中的“同步代码(目标4.3)”。。!!您将找到在何处使用同步word@darthvading:检查这个:。!!我想你需要java.nio.channels.FileLock
-请看这里的mfrankli的答案@Seelenvirtuose我理解你的建议。不过,我觉得这里也有可能出现僵局。假设App1和App2都看到“abc.txt.lock”不可用,并且都尝试创建它,反之亦然。我知道发生这种情况的可能性很小,但它可能发生。