Java 多线程

huayiluo 2013-10-04 02:44:19
一直以来,我希望做到一个功能就是

比如我有图片很多张。

http://www.xx.com/1.jpg
http://www.xx.com/2.jpg
http://www.xx.com/3.jpg
http://www.xx.com/4.jpg
http://www.xx.com/5.jpg
..................100.jpg

到这些的图片名称,都是数字增长的。

我现在想做的就是:两个线程。同时进行下载。

class MultiDownloadThread implements Runnable{
private int index;
public void run() {
// TODO Auto-generated method stub
synchronized (this) {
index++;
download(index);//这个方法,里面会有堵塞,
}

}

class Demo{
public static void main(String []args){
MultiDownloadThread t=new MultiDownloadThread();
new Thread(t).start();
new Thread(t).start();
}
}

希望这样,启动2个线程,同时可以下载2张。分别去下载
1.jpg,2.jpg;
3.jpg,4.jpg;
5.jpg,6.jpg;

但是不行,如果线程1进入下载了,第二个线程就得等待,因为在同步块,download要等待网络图片。

问题如何作到,同步获得index++,然后在同步块(synchronized )外面启动download(index);




总的要求就是,2个线程,获得同步标识(index++),然后分别去执行有堵塞的下载方法(download(index))
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huayiluo 2013-10-04
  • 打赏
  • 举报
回复
引用 2 楼 AA5279AA 的回复:
应该不会啊,楼主想实现的这个功能之前我专门做过的。 多线程确实要比单线程快一点,但是也只是快一点而已,因为最重要的还是看带宽。。。 楼主只需要对index加锁而不需要对整个过程加锁的。。 楼主设一个 synchronized int addIndex(){ return index++; } 方法, public void run() { // TODO Auto-generated method stub int i=addIndex(); download(i);//这样应该就可以了 }
感谢,多年来一直的问题,谢谢。解决了
失落夏天 2013-10-04
  • 打赏
  • 举报
回复
应该不会啊,楼主想实现的这个功能之前我专门做过的。 多线程确实要比单线程快一点,但是也只是快一点而已,因为最重要的还是看带宽。。。 楼主只需要对index加锁而不需要对整个过程加锁的。。 楼主设一个 synchronized int addIndex(){ return index++; } 方法, public void run() { // TODO Auto-generated method stub int i=addIndex(); download(i);//这样应该就可以了 }
  • 打赏
  • 举报
回复
其实我一直不明白多核情况下如何让俩线程同时运行

62,614

社区成员

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

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