高手来解决一个关于线程的问题

mr-yin 2009-07-18 08:45:50
package Test0717;

import java.io.*;

import static net.mindview.util.Print.*;

public class TestCopy implements Runnable
{
Object o=new Object();

static String str="E:\\java";
public void run()
{
File f=new File(str);
TestCopy.rmdir(f);



}
public static void rmdir(File path)
{

if(!path.isDirectory())
{
print("这不是一个文件夹!");
return;

}
File[] file=path.listFiles();
for(int i=0;i<file.length;i++)
{
File f=file[i];
//print(f.getName());
if(f.isDirectory())
{

File filed=new File("back\\"+f.getParent().substring(str.length())+"\\"+f.getName());
filed.mkdir();
TestCopy.rmdir(f);
}else
{
//print();
copy(f.getParent().substring(str.length()),f);

}

}

}
void creatDir()
{

}
public synchronized static void copy(String s,File fi)
{
File f=new File("back");
if(f.exists())
{
f.delete();
}else
{
f.mkdir();
}
//print(s);
File temp=new File("back\\"+s+"\\"+fi.getName());
//print(fi.getName());
try {
temp.createNewFile();

} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
FileInputStream fis=new FileInputStream(fi);
FileOutputStream fos=new FileOutputStream(temp);
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
int i;
while((i=bis.read())!=-1)
{
bos.write(i);
}
bis.close();
bos.close();
fis.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
public static void main(String args[])
{
TestCopy tc=new TestCopy();
Thread t1=new Thread(tc);
Thread t2=new Thread(tc);
t1.start();
t2.start();


}

}
...全文
89 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋斗并快乐着 2009-07-19
  • 打赏
  • 举报
回复
那个synchronize的会使copy过程变成同一时间只有一个线程执行。也就是一个文件copy完才会执行另一次copy。
文件操作一般瓶颈在于IO,多线程无法提高。
就这个程序来说,锁加的没问题。
yue_hun 2009-07-19
  • 打赏
  • 举报
回复
线程在有些地方是可以提高效率,但是用多线程的时候特别要注意,要考虑清楚,因为多线程如果考虑的不全,很容易出现死锁和一系列问题。而且也不是一下就可以测试的出来的。要是你们项目中出现你个这样的问题,那基本上只能下线了。
mr-yin 2009-07-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zyongsheng83 的回复:]
那个synchronize的会使copy过程变成同一时间只有一个线程执行。也就是一个文件copy完才会执行另一次copy。
文件操作一般瓶颈在于IO,多线程无法提高。
就这个程序来说,锁加的没问题。
[/Quote]

哦,谢谢呀,那是不是说在这里这个多线程基本上起不到作用了?
mr-yin 2009-07-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lasfrost 的回复:]
楼主为何认为多线程能提高复制效率,做过对比测试吗
[/Quote]

我感觉吧,比如说有四个桌子需要搬到另一个地方,假如一个人搬的话他的搬4次,假如是两个人的话不是每个人搬2次就够了吗?
对于多线程的应用还有点迷茫。希望大家多给我点提示,谢谢大家
贝隆 2009-07-19
  • 打赏
  • 举报
回复
学习
Angus 2009-07-19
  • 打赏
  • 举报
回复
对于copy你怎么能用线程去拆开他呢 ,那他的数据能连续吗?
wangqingke 2009-07-19
  • 打赏
  • 举报
回复
对硬盘的操作就好比是一座独木桥,即使你有一万个人,也要一个人一个人的过。
lasfrost 2009-07-18
  • 打赏
  • 举报
回复
楼主为何认为多线程能提高复制效率,做过对比测试吗
mr-yin 2009-07-18
  • 打赏
  • 举报
回复
多写多练,多看,沉住气,把基础打牢
冰山6 2009-07-18
  • 打赏
  • 举报
回复
我怎么才能把JAVE学习好了
mr-yin 2009-07-18
  • 打赏
  • 举报
回复
这个是我写了一下把一个文件夹里的内容备份到另一个地方的类,其中想用到多线程提高效率,但是加锁时不知道加的对不对,高手了解决下,谢谢

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧