用多个子线程从网页下载图片,用到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函数的操作,用于保存图片文件。
问题是:当我不用多线程保存图片文件时,也就是一张一张的下载,下载下来的图片数量是正确的,而用多线程下载的图片数量却少了一些。请教高手,小弟对多线程不是非常了解,谢谢!!!

解决方案 »

  1.   

    不知到问题出现在哪里。我这里,只知道思路,
    首先创建一个线程安全的队列。用于存放待下载图片的连接地址。
    然后,创建几个线程,循环从队列里面取出一个地址,然后,下载到硬盘里面。
    (如果下载过程中出现问题,要写个简单的日志。)创建一个线程,把图片的连接地址,放到队列里面。That's all
      

  2.   

    不知到问题出现在哪里。我这里,只知道思路,
    首先创建一个线程安全的队列。用于存放待下载图片的连接地址。
    然后,创建几个线程,循环从队列里面取出一个地址,然后,下载到硬盘里面。
    (如果下载过程中出现问题,要写个简单的日志。)创建一个线程,把图片的连接地址,放到队列里面。That's all