场景:存在多个应用程序,都需要对同一文件进行读写操作如何控制不同应用程序之间的同步?如何避免不同程序同时对同一文件读写,产生文件内容不一致的问题?Note:是不同程序 ,不是不同进程对同一文件的读写。

解决方案 »

  1.   

    利用线程来实现吧,读写文件代码放在一个类的方法里,加synchronized来实现同步,
      

  2.   

    frilly(秋◆水)在同一个程序中可以使用线程,加synchronized来实现但是不同应用程序如何用线程来实现?
      

  3.   

    You may want to check out class java.nio.FileChannel java.nio.FileLock and related classes.
      

  4.   

    文件锁
    File file = new File(path);
    RandomAccessFile raf = new RandomAccessFile(file, "rws")  //以独占方式打开文件
    ...
    raf.close();

    File file = new File(path);
    RandomAccessFile raf = new RandomAccessFile(file, "rw");
    FileChannel fc = raf.getChannel();
    //FileLock lock = fc.tryLock();
    FileLock lock = fc.lock();
    ...
    lock.release();
    raf.close();
      

  5.   

    楼上几位说的方法对同一个程序的不同线程访问有效
    但对不同程序,我试了一下似乎 不起作用
    还是谢谢各位。gongyali2005(JAVA 民工) 能否给个具体的例子?
      

  6.   

    刚才说错了,不好意思。CrazyGou(阿狗)(青春拉扯着我们,轰轰烈烈地向前跑。) 方法中:File file = new File(path);
    RandomAccessFile raf = new RandomAccessFile(file, "rw");
    FileChannel fc = raf.getChannel();
    //FileLock lock = fc.tryLock();
    FileLock lock = fc.lock();
    ...
    lock.release();
    raf.close();这个方法是可以的。下面是java doc里面的原话 This file-locking API is intended to map directly to the native locking facility of the underlying operating system. Thus the locks held on a file should be visible to all programs that have access to the file, regardless of the language in which those programs are written. 
    翻译:
    此文件锁定 API 直接映射到基础操作系统的本机锁定设施。因此,无论程序是用何种语言编写的,某个文件上所保持的锁定对于所有访问该文件的程序来说都应该是可见的。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~非常感谢!!!!
    不过比较郁闷的是 从以下版本开始: 1.4 
    由于某些原因只有用1.3的JDK请问还有没有其他的方法?