1. 可以利用 nio 的 FileChannel 锁。 但它的实现是建立在操作系统之上的。 也就是不能垮平台。
下面是网上流行的一段代码:
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();
}
}
2. (关键就是拿到FileChannel). 另外一个取的的方式是就是通过 FileInputStream or FileOutputStream. (注意JDK版本, 以前的可能会有问题)
File file = new File("lock");
FileOutputStream fos = new FileOutputStream(file);
FileLock fileLock = fos.getChannel().tryLock();
fileLock.release();
3. 最安全的方法就是创建一个空的锁文件。 对那锁文件进行监测达到独占访问方式。
分享到:
相关推荐
在Java编程中,有时我们需要确保文件的写操作是独占的,防止多个线程或进程同时写入导致数据混乱。以下介绍的5种方法可以帮助我们实现这一目标: 1. **利用RandomAccessFile的"rws"模式**: RandomAccessFile提供...
在传统的Java I/O中,我们通常使用InputStream和OutputStream进行文件复制,而这种方式需要不断读写,造成大量的上下文切换,效率较低。NIO通过通道和缓冲区的配合,可以实现批量读写,减少系统调用,从而提高性能。...
它允许一个或多个进程在同一时间对文件的特定部分进行独占访问,从而防止数据的不一致性。本篇将深入探讨Java中文件锁的实现,以及如何在实际项目中应用它们。 Java提供了多种方法来实现文件锁,主要通过`java.nio....
该规范涵盖了 Java 编码风格、文件组织、代码风格、注释、命名、声明、异常、习惯等方面。 一、文件组织 * 文件注释:每个 Java 源文件都应包含一个单一的公共类或接口,私有类和接口可以与公共类放入同一个源文件...
文件对磁盘块是独占的。 目录结构采用树型目录结构。 每个目录项为 8 字节,要存储目录名或文件名,扩展名,目录、文件属性,起始盘号,文件长度。每个文件夹最多存放 8 个目录项。 根目录为磁盘第二块。 磁盘分配...
- 每个类或接口应独占一个文件,文件名与类名相同。 - 使用空行和适当的缩进来使代码结构清晰,一般每级缩进为4个空格。 - 类内的成员变量和方法应按顺序排列:静态变量、实例变量、构造函数、公共方法、受保护...
建议1.1.2 规定,类属性和类方法不要交叉放置,不同存取范围的属性或者方法也尽量不要交叉放置。 建议1.2 规定,修饰词按照指定顺序书写:[访问权限][static][final] 。 3. 注释 华为JAVA编程规范强调了注释的...
关闭并以独占方式重新打开数据库,按照提示进行密码更改。 最后,如果你需要将Access数据库迁移到Oracle等其他数据库系统,可能需要使用特定的迁移工具或者编程实现数据转换。 总结起来,Java连接Access数据库涉及...
3. **文件通道的锁**:支持文件的共享锁和独占锁。 4. **选择器的改进**:选择器的性能提升,以及新的选择键(SelectionKey)选项,提供了更多的控制和灵活性。 5. **套接字通道的改进**:如支持IPv6,以及SSL/TLS...
9. 类和接口的访问修饰符:可以设置默认的访问修饰符显示方式,例如public、private、protected等。 10. 引入(import)语句的管理:Eclipse提供自动整理导入语句的功能,可以设置按字母顺序排序,或者去除未使用的...
Java内存主要分为堆内存(Heap)、方法区(Method Area)、栈内存(Stack)、程序计数器(Program Counter Register)和本地方法栈(Native Method Stack)。 #### Java堆的结构 Java堆是所有线程共享的一块内存...
为了深入理解Java并发编程,有必要了解其核心技术点和相关实现原理,以下将详细介绍文件中提及的关键知识点。 1. Java同步原语 Java提供了多种同步原语来保证线程安全,主要包括关键字volatile、synchronized以及...
**编译源文件**:通过`javac`命令将`.java`文件编译成`.class`文件,即字节码文件。 3. **运行程序**:使用`java`命令执行编译后的字节码文件。 3. **主类和main方法**: - **知识点**: - Java程序的执行入口...
Java面试是程序员职业生涯中至关重要的环节,而针对Java的面试问题通常涵盖广泛的知识点,从基础语法到高级设计模式,再到数据库操作和系统管理。以下是一些常见的Java面试问题及其详细解释: 1. **文件操作**: -...
- 执行`java Xiti.class`也会得到错误提示,因为无法直接通过类文件来运行Java程序。 - 执行`java Xiti`将会输出:“您好,很高兴认识您 nice to meet you”。 #### 习题 2(第 2 章) ##### 一、问答题解析 1....
《Java语言编程规范》是指导Java开发者遵循的一套标准规则,旨在提高代码的可读性、可维护性和团队协作效率。这份规范由华为技术有限公司制定,涵盖了排版规范、建议和注释规范等多个方面。 排版规范是Java编程的...
随机读写流RandomAccessFile允许在文件的任意位置进行读写操作,而文件锁(FileLock)则提供了在多线程或进程环境下对文件的独占访问控制。 Java的System类包含了三个预定义的流:System.in、System.out和System....
在Java模拟操作系统中,可能需要抽象出设备类,为不同类型的设备提供通用的接口,同时处理设备的独占性和并发访问问题。 5. **时钟功能**: 时钟是操作系统中用于计时和触发事件的关键组件。模拟时钟可能需要实现...