栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java使用多线程下载

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java使用多线程下载

并行和并发有什么区别?
  • 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

  • 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。

  • 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。

线程和进程的区别?
  • 进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。

  • 线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。

代码如下

方式一:
package Java.Thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
//创建线程方式一:继承Thread,重写run方法
public class TestThread2 extends Thread {
    private String url;
    private String  name;

    public TestThread2(String url,String name){
        this.url=url;
        this.name=name;
    }

    @Override
    public void run() {
        WebDownloader downloader = new WebDownloader();
        downloader.download(url,name);
        System.out.println("下载了文件名"+name);

    }

    public static void main(String[] args) {
        TestThread2 t1 = new TestThread2("https://c-ssl.duitang.com/uploads/blog/202008/20/20200820180927_dfzpj.thumb.300_300_c.jpg","1.jpg");
        TestThread2 t2 = new TestThread2("https://c-ssl.duitang.com/uploads/item/202004/06/20200406193332_levbg.thumb.300_300_c.jpg","2.jpg");
        TestThread2 t3 = new TestThread2("https://c-ssl.duitang.com/uploads/item/202004/27/20200427160432_mhjwn.thumb.300_300_c.jpg","3.jpg");

        t1.start();
        t2.start();
        t3.start();
    }
}

class WebDownloader {
    public void download(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        }
        catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常");
        }
    }
}
方式二
package Java.Thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

//创建线程方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口,调用start方法
public class TestThread3 implements Runnable {
    private String url;
    private String name;

    public TestThread3(String url,String name){
        this.url=url;
        this.name=name;
    }

    @Override
    public void run() {
        WebDownLoader2 downLoader2 = new WebDownLoader2();
        downLoader2.download(url,name);
        System.out.println("下载了文件名" + name);
    }

    public static void main(String[] args) {
        TestThread3 t1= new TestThread3("https://dl.stream.qqmusic.qq.com/C400003qyCb24Rhq7G.m4a?guid=1009329214&vkey=EBAD796F5C4C03506E5A1AECD46DD5903E129E67F83DE2E68EF83DE43ED7A47C5AF920D9A762313F3DDBD776389A0E8BD53E181FF50F375B&uin=1064432866&fromtag=66","水山少年梦.mp3");
        TestThread2 t2 = new TestThread2("http://img1.gamedog.cn/2021/04/23/5649562-2104231049560.jpg","2.jpg");
        TestThread2 t3 = new TestThread2("http://img1.gamedog.cn/2021/04/23/5649562-2104231045460.jpg","3.jpg");

        new Thread(t1).start();
        new Thread(t2).start();
        new Thread(t3).start();
    }
}
class WebDownLoader2{
    public void download(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        }
        catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常");
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号