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

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


}

}
...全文
90 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
  • 打赏
  • 举报
回复
这个是我写了一下把一个文件夹里的内容备份到另一个地方的类,其中想用到多线程提高效率,但是加锁时不知道加的对不对,高手了解决下,谢谢
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。通过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 通过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...

62,620

社区成员

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

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