`

java锁住一个文件(独占方式访问)

阅读更多
import java.io.*;
import java.nio.channels.*;

 

public class LockFile {
  public LockFile() {
  }

  public static void main(String[] args) throws Exception {

    RandomAccessFile raf = new RandomAccessFile(new File("c:\\test.txt"), "rw");

    FileChannel fc = raf.getChannel();
    FileLock fl = fc.tryLock();

    if (fl.isValid()) {
      System.out.println("get the lock!");

      //测试线程
      new Thread() {
        public void run() {
          while (true) {
            try {
              Thread.sleep(100);
              FileReader fr = new FileReader(new File("c:\\test.txt"));
              int c;
              while ( (c = fr.read()) != -1) {
                System.out.println( (char) c);
              }
              fr.close();
              break;
            }
            catch (Exception e) {
              System.out.println(e);
            }
          }
        }
      }.start();

      //模拟其它操作的耗时:比如用notepad打开无法修改。但是用程序来读写此文件都会异常
      raf.write("kingfish(八百里秦川@龙城异客)".getBytes());
      Thread.sleep(5000);

      fl.release();
      System.out.println("release the lock!");
    }
    raf.close();
  }
}


分享到:
评论

相关推荐

    fopen独占方式操作文件

    C API fopen打开的文件无法以独占方式操作文件,此代码利用Windows API巧妙的解决了该问题

    打开被独占的文件方法 源代码

    在Windows系统中,当一个进程打开文件并请求独占访问时,系统会设置相应的文件锁,阻止其他进程进行并发访问。在.NET框架或者C++等语言中,可以通过指定文件打开模式(如:FILE_SHARE_READ, FILE_SHARE_WRITE)来...

    java文件锁的实现

    它允许一个或多个进程在同一时间对文件的特定部分进行独占访问,从而防止数据的不一致性。本篇将深入探讨Java中文件锁的实现,以及如何在实际项目中应用它们。 Java提供了多种方法来实现文件锁,主要通过`java.nio....

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    在多线程或者网络环境下,有时我们需要确保文件在同一时刻只被一个线程或进程访问,这就需要用到文件锁。Java NIO提供了FileLock接口来实现这一功能。你可以通过FileChannel的lock()和tryLock()方法获取文件锁。锁...

    彻底理解Java中的各种锁.pdf

    锁粗化是指将多个细粒度的锁操作合并为一个粗粒度的锁操作,以减少线程在获取和释放锁时产生的开销。锁消除是指在运行时,编译器检测到不可能存在共享数据竞争的锁操作时,会将其消除掉。 7. 死锁与锁的其他问题 当...

    打开被独占文件的方法

    当一个进程打开一个文件并对其进行读写操作时,为了确保数据的一致性和完整性,系统可能会阻止其他进程同时访问该文件。这种现象被称为文件的“独占”。 #### 如何打开被独占的文件 1. **利用备份模式**:在打开...

    vc查看某文件被谁独占打开了(不能删除的文件),仿Unlocker.visual c++

    描述中的“vc查看某文件被谁独占打开了,仿Unlocker.zip”进一步确认了我们要创建的是一个模仿Unlocker功能的项目,它将能够检测哪些进程持有文件的独占访问权限。 从标签“unlocker 文件锁”可以看出,这个项目的...

    Java锁机制详解.pdf

    显示锁的一个重要接口是Lock,它提供了对锁操作的更细粒度控制,而ReentrantLock是Lock的一个具体实现,它提供了可重入的特性,允许线程多次进入锁定的代码块。 Lock接口主要定义了以下方法: 1. lock():获取锁,...

    java 读写锁代码

    - 读写锁通常使用两个内部锁来实现:一个是读锁,另一个是写锁。读锁用一个计数器记录当前的读者数量,写锁则用一个布尔值表示是否有写入者。 - 获取读锁时,如果无写锁且无等待写锁的线程,则可以立即获取;如果...

    Java锁的种类以及区别

    互斥锁也称为独占锁或写锁,它确保同一时间内只有一个线程能够执行临界区内的代码。这种锁通常用于保护对共享资源的写操作,以防止数据不一致性。 **2. 读写锁** 读写锁允许一个资源可以被多个线程同时读取,但只...

    怎么样知道一个文件是否已经被谁打开了 如何打开被独占打开了的文件方法 用createfile以独占方式打开的那种方法怎么不行有没有别的方法

    - 使用`Handle.exe`工具,这是一个由 Sysinternals 提供的实用程序,可以显示系统中的所有文件句柄和锁。 - .NET框架提供了一些类库,如`System.IO.FileInfo`,可以尝试打开文件并捕获异常,以确定文件是否可用。 ...

    5种解决Java独占写文件的方法

    这是一种“Hack”方案,先将数据写入一个临时文件,然后利用操作系统的原子性重命名操作,将临时文件改名为目标文件。这种方式保证了在多线程环境下的安全性,因为文件重命名通常是原子性的。 4. **使用...

    Java的锁机制的学习和使用

    当一个线程访问某个对象的一个`synchronized`实例方法时,它首先必须获得该对象的锁,然后才能执行方法体。在此期间,其他任何线程都无法访问该对象的其他`synchronized`实例方法,但可以访问该对象的非`...

    59 对MySQL锁机制再深入一步,共享锁和独占锁到底是什么?l.pdf

    在数据库系统中,锁是一种用来保障并发控制的机制,它用来协调不同事务对同一个数据对象的访问。锁的目的是为了防止多个事务并发操作时造成的数据不一致性。根据锁的作用范围和对象的不同,可以将锁分为多种类型。在...

    java-syn.zip_Java syn_Java syn锁_java同步锁syn_java锁 syn_syn同步事务锁

    这种方式下,整个方法体被视为一个临界区,线程必须获取到对象的监视器锁才能执行。 2. **同步代码块**: 对于更细粒度的控制,可以使用同步代码块,只锁定必要的代码区域: ```java synchronized (object) { ...

    文件锁,很好用的一个东西

    文件锁的主要目的是实现资源的互斥访问,确保在任何时候只有一个进程或线程能够对文件进行读写操作。 文件锁可以分为两类:共享锁(读锁)和独占锁(写锁)。共享锁允许多个进程同时读取文件,而独占锁则只允许一个...

    Java中的锁分类与使用.docx

    - **共享锁**允许多个线程同时持有,Java的ReadWriteLock的读锁就是一个例子。读锁可以被多个线程共享,但写锁是独占的,即写锁存在时,读锁和写锁都无法被其他线程获取。 3. **互斥锁/读写锁** - **互斥锁**(如...

    关于读写锁算法的Java实现及思考

    关于读写锁算法的Java实现及思考,是一个深入探讨了多线程环境下资源访问控制机制的主题。在现代软件开发中,尤其是并发编程领域,读写锁(ReadWriteLock)是一种非常重要的同步工具,它允许多个线程同时进行读操作...

    读写锁,共享读,独占写

    一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁. 正是因为这个特性, 当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞. 当读写锁在读加锁...

    读-写共享独占锁源码实现-C++实现

    为了提高效率,我们通常会采用读写锁(Read-Write Lock)机制,它允许多个读者同时访问资源,但只允许一个写者进行修改。这正是“读-写共享独占锁”所要解决的问题。在VC++环境中,我们可以自定义实现这种锁来优化多...

Global site tag (gtag.js) - Google Analytics