多线程复制 java_Java 多线程文件拷贝

importjava.io.*;classBuffer

{privatechar[] contents;privateintsize;privateintstate;publicfinalstaticintFULL=0;publicfinalstaticintEMPTY=1;publicfinalstaticintUNSTABLE=2;publicfinalstaticintEND=3;publicBuffer()

{

state=EMPTY;

}publicchar[] getContents()

{returncontents;

}publicvoidsetContents(char[] contents,intsize)

{this.contents=contents;this.size=size;

}publicintgetSize()

{returnsize;

}synchronizedpublicintgetState()

{returnstate;

}synchronizedpublicvoidsetState(intstate)

{this.state=state;

}

}classThread1extendsThread

{privateString inputFile;privateBuffer buffer;publicThread1(String inputFile)

{this.inputFile=inputFile;this.buffer=newBuffer();

}publicvoidrun()

{try{

BufferedReader in=newBufferedReader(newFileReader(newFile(

inputFile)));intsize=0;while(true)

{char[] contents=newchar[102];

size=in.read(contents,0,100);if(size<=0)break;synchronized(buffer)

{if(Buffer.EMPTY!=buffer.getState())

{

buffer.wait();

}

System.out.println("Thread1:"+size);

buffer.setContents(contents, size);

buffer.setState(Buffer.FULL);

buffer.notify();

}

}

buffer.setState(Buffer.END);synchronized(buffer)

{

buffer.notify();

}

in.close();

}catch(FileNotFoundException e)

{

System.err.println(e.getMessage());

e.printStackTrace();

}catch(IOException e)

{

System.err.println(e.getMessage());

e.printStackTrace();

}catch(InterruptedException e)

{

System.err.println(e.getMessage());

e.printStackTrace();

}

}publicBuffer getBuffer()

{returnbuffer;

}

}classThread2extendsThread

{privateString outputFile;privateBuffer buffer;publicThread2(String outputFile, Buffer buffer)

{this.outputFile=outputFile;this.buffer=buffer;

}publicvoidrun()

{try{

BufferedWriter out=newBufferedWriter(newFileWriter(newFile(outputFile)));while(true)

{synchronized(buffer)

{intstate;while(Buffer.FULL!=(state=buffer.getState()))

{if(Buffer.END==state)break;

buffer.wait();

}if(Buffer.END==state)break;

System.out.println("Thread2:"+buffer.getSize());

out.append(newString(buffer.getContents(),0, buffer.getSize()));

buffer.setState(Buffer.EMPTY);

buffer.notify();

}

}

out.close();

}catch(IOException e)

{

System.err.println(e.getMessage());

e.printStackTrace();

}catch(InterruptedException e)

{

System.err.println(e.getMessage());

e.printStackTrace();

}

}

}publicclassFileCopy

{publicstaticvoidmain(String[] argv)

{

Thread1 thread1=newThread1("f:\\1.txt");

Thread2 thread2=newThread2("f:\\2.txt", thread1.getBuffer());

thread1.start();

thread2.start();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值