【发布时间】:2021-06-13 01:55:23
【问题描述】:
我正在使用 Java RMI 实现一个快速文件服务器,它有两种远程方法,一种用于从服务器读取文件,另一种用于将其写入客户端。
我想锁定对同一文件的并发访问。例如,如果 10 个用户同时调用 read() 和 write() 远程方法,指定同一个文件:'foo.txt',我需要在第二个调用之前完全执行第一个调用,第二个调用是在第三次调用之前完全执行...
如果我在两个 RMI 方法中使用“同步”语句,如果不同的用户同时调用这些方法,指定不同的文件,我会失去效率。
另一方面,我不能使用 FileLock 类,因为:
"代表整个 Java 虚拟机持有文件锁。 它们不适合控制多人对文件的访问 同一虚拟机中的线程。”
在 RMI 中,同一个 JVM 中只有一个进程,它为每个远程调用执行新线程。
【问题讨论】:
-
我建议每个文件一个远程对象实例,以及方法同步。但是文件读写在操作系统级别是原子的。
标签: java multithreading concurrency rmi locks