账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    多个java程序写一个文件,如何保证只有一个程序在写这个文件呢?
    44
    0

    以前做的是多线程加锁 其实只要加个 synchronized 就好了,但是如果是多个 不同的java程序 怎么保证只有一个进程在写入呢

    用文件锁可行吗?

     FileChannel fc = fi.getChannel(); 
        return fc.tryLock(); 

    如果放任不管,多个进程 同时写一个文件 会出问题吗?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 孤单一人 普通会员 1楼

      在Java中,为了保证只有一个程序在写文件,你可以使用线程安全的集合(如ConcurrentHashMap)或者一个锁(如ReentrantLock)。

      以下是一个使用ConcurrentHashMap的例子:

      ```java import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReentrantLock;

      public class FileWriter { private ConcurrentHashMap writers = new ConcurrentHashMap<>();

      public void addWriter(String filename) {
          writers.put(filename, new FileWriterThread(filename));
      }
      
      public void write(String filename) {
          FileWriterThread writerThread = writers.get(filename);
          if (writerThread != null) {
              writerThread.write(filename);
          }
      }
      

      } ```

      在这个例子中,addWriter方法用于添加一个新的文件写入者,write方法用于写入文件。

      以下是一个使用ReentrantLock的例子:

      ```java import java.util.concurrent.locks.ReentrantLock;

      public class FileWriter { private final ReentrantLock lock = new ReentrantLock();

      public void addWriter(String filename) {
          lock.lock();
          try {
              writers.put(filename, new FileWriterThread(filename));
          } finally {
              lock.unlock();
          }
      }
      
      public void write(String filename) {
          lock.lock();
          try {
              FileWriterThread writerThread = writers.get(filename);
              if (writerThread != null) {
                  writerThread.write(filename);
              }
          } finally {
              lock.unlock();
          }
      }
      

      } ```

      在这个例子中,addWriter方法和write方法使用了ReentrantLock,这样可以确保在同一时刻只有一个线程可以写入文件。

    • 幸福、已走遠 普通会员 2楼

      在Java中,为了保证只有一个程序在写文件,你可以使用线程安全的集合(如ConcurrentHashMap)或者一个锁(如ReentrantLock)。

      以下是一个使用ConcurrentHashMap的例子:

      ```java import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReentrantLock;

      public class FileWriter { private ConcurrentHashMap writers = new ConcurrentHashMap<>();

      public void addWriter(String filename) {
          writers.put(filename, new FileWriterThread(filename));
      }
      
      public void write(String filename) {
          FileWriterThread writerThread = writers.get(filename);
          if (writerThread != null) {
              writerThread.write(filename);
          }
      }
      

      } ```

      在这个例子中,addWriter方法用于添加一个新的文件写入者,write方法用于写入文件。

      以下是一个使用ReentrantLock的例子:

      ```java import java.util.concurrent.locks.ReentrantLock;

      public class FileWriter { private final ReentrantLock lock = new ReentrantLock();

      public void addWriter(String filename) {
          lock.lock();
          try {
              writers.put(filename, new FileWriterThread(filename));
          } finally {
              lock.unlock();
          }
      }
      
      public void write(String filename) {
          lock.lock();
          try {
              FileWriterThread writerThread = writers.get(filename);
              if (writerThread != null) {
                  writerThread.write(filename);
              }
          } finally {
              lock.unlock();
          }
      }
      

      } ```

      在这个例子中,addWriter方法和write方法使用了ReentrantLock,这样可以确保在同一时刻只有一个线程可以写入文件。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部