多线程


多线程

java.Thread

eg:

线程的实现

将网络图片通过多线程下载到本地

下载类


        commons-io
        commons-io
        2.6
    
/*下载器*/
class WebDownLoader{
    //下载方法
    public void downloader(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常");
        }
    }
}
  • 继承Thread类
//不建议使用:OOP继承局限性
//创建线程方式1:继承Thread类,重写run()方法,调用start并开启线程
//线程开启不一定立即执行,由cpu调度执行
public class ThreadTest2 extends Thread{
    private String url;//网络图片地址
    private String name;//保存的文件名
    public ThreadTest2(String url,String name){//全参数构造方法
        this.url=url;
        this.name=name;
    }
    //下载图片执行体
    @Override
    public void run() {
        WebDownLoader webDownLoader=new WebDownLoader();
        webDownLoader.downloader(url,name);
        System.out.println("下载了"+name+"的文件");
    }
    public static void main(String[] args) {
        ThreadTest2 t1=new ThreadTest2("https://pic.leetcode-cn.com/d2e85988beccb271af4b1a8f4767e4bdf4c085aaf5aaef093347d778e4e138d7-20.png","华为.png");
        ThreadTest2 t2=new ThreadTest2("https://pic.leetcode-cn.com/9e736bdb7232bf7d9633dfbc7a053b3dc063b1b02dacf17163a58e1473b71d0c-Dji-Drone-Logo-Sticker__91693.1511163135.jpg","大疆.jpg");
        ThreadTest2 t3=new ThreadTest2("https://pic.leetcode-cn.com/1608896124-NAAKhT-images.png","字节跳动.png");
        t1.start();
        t2.start();
        t3.start();
    }
}
  • 实现Runnable接口
//推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
//创建线程方式2:实现Runnable接口,实重写run()方法,执行线程需要丢入runnable接口实现类,调用start()方法启动线程
public class RunnableTest2 implements Runnable{
    private String url;//网络图片地址
    private String name;//保存的文件名
    public RunnableTest2(String url,String name){
        this.url=url;
        this.name=name;
    }
    //下载图片执行体
    @Override
    public void run() {
        WebDownLoader webDownLoader=new WebDownLoader();
        webDownLoader.downloader(url,name);
        System.out.println("下载了"+name+"的文件");
    }
    public static void main(String[] args) {
        RunnableTest2 t1=new RunnableTest2("https://pic.leetcode-cn.com/d2e85988beccb271af4b1a8f4767e4bdf4c085aaf5aaef093347d778e4e138d7-20.png","华为.png");
        RunnableTest2 t2=new RunnableTest2("https://pic.leetcode-cn.com/9e736bdb7232bf7d9633dfbc7a053b3dc063b1b02dacf17163a58e1473b71d0c-Dji-Drone-Logo-Sticker__91693.1511163135.jpg","大疆.jpg");
        RunnableTest2 t3=new RunnableTest2("https://pic.leetcode-cn.com/1608896124-NAAKhT-images.png","字节跳动.png");
        new Thread(t1).start();
        new Thread(t2).start();
        new Thread(t3).start();
    }
}