能不能在程序中控制某一个特定的文件在特定的时间段内只能被单一个线程访问??具体来讲是这样的
我的程序有两个方法,第一个方法生成文件,第二个方法解析这个方法
这两个方法中需要用线程来实现,因此出现的问题是,在第一个方法还没有将文件写完的时候,第二个方法就开始解析这个文件,致使程序错误。能不能在程序中控制这个文件只由一个线程来访问?在一个方法还没有完成对文件操作的同时,另一个方法不同访问这个文件

解决方案 »

  1.   

    对于这样的问题,通常有两种处理手段:1、生成文件的线程,先生成临时文件,在内容写完以后,关闭文件,并move成目标文件,
    这样,读取线程就不会在写入线程工作一半的时候开始读取。2、生成目标文件的时候,提前生成一个标识文件(类似与java中的锁),读取方必须在标识文件消失后才能够开始读取。
      

  2.   

    答:由于楼主的问题是:
    一)同一个JVM中多个并发线程对同一个文件的互斥访问,因而:楼主直接使用线程锁就可以了。即:
    private final ReentrantLock lock = new ReentrantLock();//互斥文件对应的结象锁
    每一个访问该文件的线程:
    lock.lock();  // 加锁
         try {
           // 访问文件操作
         } finally {
           lock.unlock()
         }二)若是不同的程序(不同JVM)之间对同一个文件的互斥访问,可用:FileChannel的lock()来获取FileLock锁对象,进行互斥操作。