Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两个应用程序之间的互斥_Java_Android_Deadlock_Synchronized - Fatal编程技术网

Java 两个应用程序之间的互斥

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”,但我面临着同步问

我想在一个文本文件上编写两个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”不可用,并且都尝试创建它,反之亦然。我知道发生这种情况的可能性很小,但它可能发生。