小编Yak*_*kov的帖子

在单个JVM和多个JVM中使用java文件锁

我想我错过了一些东西,但我无法理解文件锁如何在Java中工作.更确切地说 - 它是如何实现的.

我似乎无法获取(甚至无法尝试获取)单个JVM内的同一文件的两个或更多锁.将成功获取第一个锁,所有进一步尝试获取更多锁将导致OverlapingFileLockException.然而,它适用于单独的过程.

我想实现由文件系统支持的数据存储,该数据存储旨在处理多个并发请求(读取和写入).我想使用文件锁来锁定存储中的特定文件.

似乎我必须在JVM级别上引入一个同步(独占),然后才对文件进行同步以避免此异常.

有人这样做过吗?

我准备了简单的测试用例来说明我的问题.我使用的是Mac OS X,Java 6.

import junit.framework.*;

import javax.swing.*;
import java.io.*;
import java.nio.channels.*;

/**
 * Java file locks test.
 */
public class FileLocksTest extends TestCase {
    /** File path (on Windows file will be created under the root directory of the current drive). */
    private static final String LOCK_FILE_PATH = "/test-java-file-lock-tmp.bin";

    /**
     * @throws Exception If failed.
     */
    public void testWriteLocks() throws Exception {
        final File file = new File(LOCK_FILE_PATH);

        file.createNewFile();

        RandomAccessFile raf = …
Run Code Online (Sandbox Code Playgroud)

java nio file-locking

5
推荐指数
2
解决办法
9846
查看次数

标签 统计

file-locking ×1

java ×1

nio ×1