java使用多线程下载

java使用多线程下载,第1张

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

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

  • 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如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("http://www.kaotop.com/file/tupian/20220430/","1.jpg");
        TestThread2 t2 = new TestThread2("http://www.kaotop.com/file/tupian/20220430/","2.jpg");
        TestThread2 t3 = new TestThread2("http://www.kaotop.com/file/tupian/20220430/","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://www.kaotop.com/file/tupian/20220430/5649562-2104231049560.jpg","2.jpg");
        TestThread2 t3 = new TestThread2("http://www.kaotop.com/file/tupian/20220430/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异常");
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/792158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存