使用Java NIO 文件锁实现进程独占
2016-12-04 18:59
141 查看
代码来自HDFS DataNode中的使用方式...看起来相对容易,实际有几点需要注意,
1.文件一定要deleteOnExit().
2.发生异常一定要将RandoemAccessFile close()掉.
3.FileLock为null时要判断.
4.FileLock关闭时,先调用FileLock.release(), 而后FileLock.chanel().close();
1.文件一定要deleteOnExit().
2.发生异常一定要将RandoemAccessFile close()掉.
3.FileLock为null时要判断.
4.FileLock关闭时,先调用FileLock.release(), 而后FileLock.chanel().close();
public class FileLockDemo { private static final String FILE_LOCK_PATH = "c:" + File.separator; private static final String FILE_LOCK_FILE_NAME = "in_use.lock"; private FileLock tryLock() throws IOException { File lockFile = new File(FILE_LOCK_PATH, FILE_LOCK_FILE_NAME); if(!lockFile.exists()) { lockFile.deleteOnExit(); } RandomAccessFile file = new RandomAccessFile(lockFile, "rws"); FileLock fileLock = null; try { fileLock = file.getChannel().tryLock(); if(fileLock == null) { throw new OverlappingFileLockException(); } } catch (OverlappingFileLockException e) { file.close(); return null; } catch (IOException e) { file.close(); throw e; } file.write(ManagementFactory.getRuntimeMXBean().getName().getBytes("UTF-8")); lockFile.deleteOnExit(); return fileLock; } private void unLock(FileLock fileLock) throws IOException { if(fileLock == null) { return; } fileLock.release(); fileLock.channel().close(); } public static void main(String[] args) { for(int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override public void run() { try { FileLockDemo demo = new FileLockDemo(); FileLock fileLock = demo.tryLock(); if(fileLock != null) { System.out.println(String.format("%s get file lock...", Thread.currentThread().getName())); } else { System.out.println(String.format("%s can not get file lock...", Thread.currentThread().getName())); } TimeUnit.SECONDS.sleep(30); demo.unLock(fileLock); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } } }
相关文章推荐
- 使用文件锁实现进程间同步
- Python使用文件锁实现进程间同步功能【基于fcntl模块】
- 使用临界段实现优化的进程间同步对象-原理和实现
- Windows CE下使用共享内存实现进程间数据交换
- MFC使用共享段实现单例进程
- 使用信号signal,实现进程之间的同步
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- 使用临界段实现优化的进程间同步对象-原理和实现 (转)
- linux下使用系统调用实现进程后台运行
- 使用最近未使用页淘汰(NRU)算法模拟实现页淘汰进程
- 使用 Python 实现多进程
- 文件锁实现进程间同步
- 使用临界段原理实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用内存映射文件实现进程通讯
- 使用dbms_job包来实现数据库后台进程
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用临界段实现优化的进程间同步对象-原理和实现
- 使用Windows API实现两个进程间(含窗体)的通信