- 44
- 0
以前做的是多线程加锁 其实只要加个 synchronized 就好了,但是如果是多个 不同的java程序 怎么保证只有一个进程在写入呢
用文件锁可行吗?
FileChannel fc = fi.getChannel();
return fc.tryLock();
如果放任不管,多个进程 同时写一个文件 会出问题吗?
- 共 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,这样可以确保在同一时刻只有一个线程可以写入文件。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
