`

[java][nio]映射文件部分加锁

阅读更多

import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
/**
 * 
 * 对映射文件部分加锁.
 *
 */
public class LockingMappedFiles {

	static final int LENGTH = 0x8ffffff;
	static FileChannel fc;

	public static void main(String[] args) throws Exception {
		fc = new RandomAccessFile("D:\\temp.tmp","rw").getChannel();
		MappedByteBuffer out = fc.map(FileChannel.MapMode.READ_WRITE, 0, LENGTH);
		for(int i = 0; i < LENGTH; i++){
			out.put((byte)i);
		}
		new LockAndModify(out, 0, 0 + LENGTH / 3);
		new LockAndModify(out, LENGTH / 2, LENGTH / 2 + LENGTH / 4);
	}
	
	private static class LockAndModify extends Thread{
		private ByteBuffer buff;
		private int start, end;
		LockAndModify(ByteBuffer mbb, int start, int end){
			this.start = start;
			this.end = end;
			mbb.limit(end);
			mbb.position(start);
			buff = mbb.slice();
			start();
		}
		
		public void run(){
			try {
				FileLock fl = fc.lock(start, end, false);
				System.out.println("Locked: " + start + " to " + end);
				
				while(buff.position() < buff.limit() - 1){
					buff.put((byte)(buff.get() + 1 ));
				}
				fl.release();
				System.out.println("Released: " + start + " to " + end);
			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}
		
	}

}


分享到:
评论

相关推荐

    腾讯java培训 ppt

    1. **JDK1.4**引入了NIO(New Input/Output),改善了I/O性能,支持内存映射和文件锁定。 2. **JDK1.5**引入了泛型,增强类型安全,自动装拆箱简化了代码。 3. **java.util.concurrent包**提供了高效的并发编程工具...

    Java面试试题(二).docx

    - **映射文件**:定义实体类和数据库表之间的映射关系。 - **Spring Boot** - **特点**: - **自动配置**:简化配置过程,提高开发效率。 - **嵌入式服务器**:内置Tomcat、Jetty等Web服务器。 - **依赖管理**...

    Java面试常见问题总结(2024最新版)

    - 解决方案包括使用线程安全的集合如`Vector`, `ConcurrentHashMap`等,或者手动加锁。 3. **HashSet、LinkedHashSet和TreeSet的区别:** - `HashSet`不保证任何特定的顺序。 - `LinkedHashSet`按插入顺序保存...

    java面试笔记整理,包含java,redis,kafka等

    - **JVM (Java Virtual Machine):** 是JRE的核心部分,负责解释执行字节码。 #### 五、Java程序执行模式 **Java程序是解释执行与编译执行的混合体:** - **解释执行:** 初始阶段,Java代码被编译成字节码,然后由...

    JavaSE基础面试题.docx

    39. **BIO、NIO、AIO**:BIO是同步阻塞,NIO是同步非阻塞,AIO(又称NIO.2)是异步非阻塞。 40. **数据库索引**:索引是一种数据结构,用于加速查询。B+树是常见的索引实现。 41. **数据库约束**:包括NOT NULL、...

Global site tag (gtag.js) - Google Analytics