用多个子线程从网页下载图片,用到httpclient包
主要代码如下:
//从url地址下载图片到电脑目录
public void saveToFile(String destUrl,String pathName)
{
HttpClient client = new HttpClient();
GetMethod get = new GetMethod(destUrl);
try
{
client.executeMethod(get);
File storeFile = new File(pathName);
FileOutputStream output = new FileOutputStream(storeFile);
//得到网络资源的字节数组,并写入文件
output.write(get.getResponseBody());
output.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
程序流程:
thread1 run()
{
获取所有图片地址;
for(1...n)
{
对每一个地址,新建一个新的子线程用于保存文件;
}
.....
}
thread2 run()
{
savaToFile(..,..);
}
例如一个网页上有n张图片,首先新建一个线程thread1进行获取每个图片地址,然后在这个线程里创建n个子线程,每个子线程都是执行saveToFile函数的操作,用于保存图片文件。
问题是:当我不用多线程保存图片文件时,也就是一张一张的下载,下载下来的图片数量是正确的,而用多线程下载的图片数量却少了一些。请教高手,小弟对多线程不是非常了解,谢谢!!!
主要代码如下:
//从url地址下载图片到电脑目录
public void saveToFile(String destUrl,String pathName)
{
HttpClient client = new HttpClient();
GetMethod get = new GetMethod(destUrl);
try
{
client.executeMethod(get);
File storeFile = new File(pathName);
FileOutputStream output = new FileOutputStream(storeFile);
//得到网络资源的字节数组,并写入文件
output.write(get.getResponseBody());
output.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
程序流程:
thread1 run()
{
获取所有图片地址;
for(1...n)
{
对每一个地址,新建一个新的子线程用于保存文件;
}
.....
}
thread2 run()
{
savaToFile(..,..);
}
例如一个网页上有n张图片,首先新建一个线程thread1进行获取每个图片地址,然后在这个线程里创建n个子线程,每个子线程都是执行saveToFile函数的操作,用于保存图片文件。
问题是:当我不用多线程保存图片文件时,也就是一张一张的下载,下载下来的图片数量是正确的,而用多线程下载的图片数量却少了一些。请教高手,小弟对多线程不是非常了解,谢谢!!!
解决方案 »
- 根据输入的数值返回人民币的形式
- 用MyEclipse6连接mysql数据库时出现Communications link failure这个错误
- 接口方面问题,不知道为什么编译错误。希望各位帮忙看一下!
- 弱弱的问一下,Java中怎样自定义异常类?
- 菜鸟求教 JScrollPane.setVisible 怎么玩, 为啥false没问题, 但true没反映??
- 请给点建议:多个客户端通过serversocket如何联系?
- 谁有O'Reilly出的《Java Threads, 2nd Edition》的ebook?
- 诸位大哥我想问问CLASSPATH在哪里设置呀!我真的太苯了,帮帮忙
- 一个JAVA继承的问题(Thinking in JAVA里的一个例子)
- 求助:有用Applet开发过类似win2000的任务管理器中的cup与内存的监控程序吗?
- java编程
- 临时对象有引用吗? 以及它的生存期
首先创建一个线程安全的队列。用于存放待下载图片的连接地址。
然后,创建几个线程,循环从队列里面取出一个地址,然后,下载到硬盘里面。
(如果下载过程中出现问题,要写个简单的日志。)创建一个线程,把图片的连接地址,放到队列里面。That's all
首先创建一个线程安全的队列。用于存放待下载图片的连接地址。
然后,创建几个线程,循环从队列里面取出一个地址,然后,下载到硬盘里面。
(如果下载过程中出现问题,要写个简单的日志。)创建一个线程,把图片的连接地址,放到队列里面。That's all