package com.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;
import java.util.Calendar;
public class LockFile extends Thread{
private String sign=null;
public LockFile(String sign){
this.sign=sign;
}
public void run(){
Calendar calstart=Calendar.getInstance();
File file=new File("F:/io.txt");
try {
sleep(2000);
//对该文件加锁
FileOutputStream out=new FileOutputStream(file,true);
FileChannel fcout=out.getChannel();
FileLock flout=null;
while(true){
try{
flout=fcout.tryLock();
}catch(OverlappingFileLockException lo){
System.out.println("有其他线程正在操作该文件~~~~~~~~~~~");
flout=null;
}
if(flout!=null){
System.out.println("获得锁");
break;
}
else{
System.out.println("有其他线程正在操作该文件,当前线程休眠1秒");
sleep(1000);
}
}
for(int i=1;i<=100;i++){
StringBuffer sb=new StringBuffer();
sb.append(sign+":这是第"+i+"行");
out.write(sb.toString().getBytes("utf-8"));
}
flout.release();
fcout.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;
import java.util.Calendar;
public class LockFile extends Thread{
private String sign=null;
public LockFile(String sign){
this.sign=sign;
}
public void run(){
Calendar calstart=Calendar.getInstance();
File file=new File("F:/io.txt");
try {
sleep(2000);
//对该文件加锁
FileOutputStream out=new FileOutputStream(file,true);
FileChannel fcout=out.getChannel();
FileLock flout=null;
while(true){
try{
flout=fcout.tryLock();
}catch(OverlappingFileLockException lo){
System.out.println("有其他线程正在操作该文件~~~~~~~~~~~");
flout=null;
}
if(flout!=null){
System.out.println("获得锁");
break;
}
else{
System.out.println("有其他线程正在操作该文件,当前线程休眠1秒");
sleep(1000);
}
}
for(int i=1;i<=100;i++){
StringBuffer sb=new StringBuffer();
sb.append(sign+":这是第"+i+"行");
out.write(sb.toString().getBytes("utf-8"));
}
flout.release();
fcout.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e){
e.printStackTrace();
}
}
}