import java.io.*;
import java.util.concurrent.ArrayBlockingQueue;
public class Main {
static int k;
static ArrayBlockingQueue<Byte> abq=new ArrayBlockingQueue<>(1000000);
public static void main(String[] args){
T1 t1=new T1();
T2 t2=new T2();
t1.start();
t2.start();
}
}
class T1 extends Thread{
public void run(){
try {
File file=new File("/home/wzpad/1.CR2");
int t= (int) file.length();
Main.k=t;
FileInputStream fi=new FileInputStream(file);
for(int n=0;n<t;n++){
Main.abq.put((byte) fi.read());
}
System.out.println("T1 over");
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
class T2 extends Thread{
public void run(){
try {
FileOutputStream fo=new FileOutputStream("/home/wzpad/2.cr2");
for(int w=0;w<Main.k;w++){
fo.write(Main.abq.take());
}
System.out.println("T2 over");
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
通过修改abq的大小,就可以看到复制速度的快慢,如果数值小,比如1024 读或写就会阻塞。