java文件锁问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 08:23:28
文件锁使用步骤是:
1)用RandomAccessFile流创建对象,2)调用getChannel()方法创建FileChannel对象,3)调用tryLock()或lock()方法获得FileLock对象。

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class Example{
public static void main(String args[]){
int b;
byte tom[]=new byte[12];
try{
RandomAccessFile input=new RandomAccessFile("Example2.java","rw");
FileChannel channel=input.getChannel();
while((b=input.read(tom,0,10))!=-1){
FileLock lock=channel.tryLock();
String s=new String(tom,0,b);
System.out.print(s);
try{ Thread.sleep(1000);
lock.release();
}
catch(Exception eee){
System.out.println(eee);
}
}
input.close();
}
catch(Exception ee){
System.out.println(ee);
}
}
}

这个程序中调用tryLock()方法时为什么要用while语句?

input调用read()方法时是read(tom,o,10),为什么是10,而不是其他数字,10是什么意思?

使用while判断是因为这里涉及到了多线程,如果使用if循环,第一个线程判断成功正要执行if块中的代码时,第二个线程启动了,改变了一个变量,使if语句不成立了,这时第一个线程醒了,执行if块中的代码时肯定出错,这里使用while用来循环判断,更加安全。
read(tom,0,10)这里指从数组下标0的位置开始,读到下标为10处,没有什么特殊含义的.