FileChannel文件锁,你可以对文件上锁,共享锁,独占锁,如果对文件是上共享锁的话,此时你可以读文件,别人也可以读文件,别人也可以上共享锁,如果是独占锁则只能由加锁线程进行文件读写,独占锁与共享锁互斥;
创新互联公司是一家专注于网站制作、成都网站设计与策划设计,扶沟网站建设哪家好?创新互联公司做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:扶沟等地区。扶沟做网站价格咨询:18980820575
底层是通过调用Linux的fnctl来从内核对文件进行加锁来实现的;
RandomAccessFile in = new RandomAccessFile("/Users/long/demo.txt", "rw");
FileChannel channel = in.getChannel();
// 对文件上独占锁,只能由加锁线程进行读写文件
FileLock lock = channel.lock(0, Integer.MAX_VALUE, false);
System.out.println("文件加独占锁成功");
// 对文件上共享锁,允许多线程一起读
/*FileLock lock = channel.lock(0, Integer.MAX_VALUE, true);
System.out.println("文件加共享锁成功");*/
System.out.println(channel.read(ByteBuffer.allocate(100)));
// 释放锁
lock.release();
Thread.sleep(60 * 60 * 1000);
channel.close();
in.close();
tryLock()是非阻塞式的,它设法获取锁,但如果不能获得,例如因为其他一些进程已经持有相同的锁,而且不共享时,它将直接从方法调用返回。
lock()是阻塞式的,它要阻塞进程直到锁可以获得,或调用lock()的线程中断,或调用lock()的通道关闭。
独占锁:也称排它锁,如果一个线程获得一个文件的独占锁,那么其它线程就不能再获得同一文件的独占锁或共享锁,直到独占锁被释放。其他线程不可读写;
共享锁:如果一个线程获得一个文件的共享锁,那么其它线程可以获得同一文件的共享锁或同一文件部分内容的共享锁,但不能获取排它锁,其他线程可读不可写。
网站标题:NIO编程之FileChannel读写锁
文章来源:http://www.shufengxianlan.com/qtweb/news13/394713.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联