在JVM内和JVM中同步共享文件

时间:2015-07-09 12:50:59

标签: java concurrency nio file-locking

我有两个不同的tomcat7服务器,每个服务器都部署了相同的Web服务。每个Web服务请求都必须更新共享文件系统(通常是NAS)上的文件。 必须同步文件写入以避免在tomcat服务器的JVM内以及2个服务器的JVM之间发生冲突。 我尝试了几种方法:

=>用于文件写入的同步块仅在同一JVM中工作。

=> FileLock适用于每个JVM,但不适用于服务器的JVM(文件只能锁定一次)。

使用Java7 nio文件系统怎么样?这可以帮到我吗? 解决这个问题的最佳方法是什么?

PS:对不起,如果我的英语不好......

1 个答案:

答案 0 :(得分:2)

我可以想到两种方法:

  1. 使用synchronized(或Lock)和FileLock;即首先获取表示规范化绝对路径名的唯一对象的本地锁,然后获取FileLock

  2. 使用数据库;例如在数据库表中锁定一行,该表具有规范化的绝对​​路径名作为唯一键。

  3.   

    使用Java7 nio文件系统怎么样?这可以帮到我吗?

    没有。问题是文件锁定是操作系统功能,并且行为(不是锁定同一进程中的其他线程)是基本的文件锁定语义......跨越一系列不同的操作系统。