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();
}
}
}