Java中的线程
在java中,为了提高程序对硬件资源的利用率,合理的使用多线程可以并行的处理多项任务,避免了不相关任务之间的等待,在执行这个任务的过程中,其他并行的任务也可以同时执行,所以用到了多线程,一个进程可以有多个线程。线程的实现方式有两种,一是继承Thread父类,二是实现Runnable接口,下面是分别使用这两种方式实现线程进行文件拷贝的代码。
继承Thread类的类:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class CopyByThread extends Thread{
private String source;
private String target;
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
@Override
public void run() {
System.out.println(source+"拷贝开始");
try {
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(target));
byte[] size=new byte[1024];
int flag=-1;
while((flag=bis.read(size))!=-1){
bos.write(flag);
}
bis.close();
bos.close();
} catch (Exception e) {
System.out.println(source+"拷贝失败");
e.printStackTrace();
}
System.out.println(source+"拷贝结束--------------");
}
}
实现Runnable接口的类:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class CopyThread implements Runnable{
private String source;
private String target;
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
@Override
public void run() {
System.out.println(source+"拷贝开始");
try {
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(target));
byte[] size=new byte[1024];
int flag=-1;
while((flag=bis.read(size))!=-1){
bos.write(flag);
}
bis.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(source+"拷贝结束--------------");
}
}
以下是主类Main:
public class Main {
public static void main(String[] args) {
String urlsource="E:/test/testone/";
String urltarget="E:/test/testtwo/";
for(int i=1;i<5;i++){
CopyByThread threaddd=new CopyByThread();
threaddd.setSource(urlsource+i+".docx");
threaddd.setTarget(urltarget+(i+2)+".docx");
threaddd.start();
}
}
public static void main1(String[] args) {
String urlsource="E:/test/testone/";
String urltarget="E:/test/testtwo/";
for(int i=1;i<5;i++){
CopyThread thread=new CopyThread();
thread.setSource(urlsource+i+".docx");
thread.setTarget(urltarget+i+".docx");
new Thread(thread).start();
}
}
}