Day02 多线程-创建线程的两种方式-练习例子

下载网图

需要用到commons.io类,这个百度搜索然后下载。

在idea新建一个package叫lib,把下载好的粘贴到lib下,同时要在在lib右键点击add as.library,才可成功导入:

 代码:创建线程方式一:继承thread类

package Thread;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
class WebDownloader{
    public void downloader(String url,String name){
        try{//图片地址转文件
            FileUtils.copyURLToFile(new URL(url),new File(name));//import java.net.URL
        }catch (IOException e){
            e.printStackTrace();
            System.out.println("IO异常,downloader方法出现问题");
        }
    }}
public class TestThread2 extends Thread{
    //实现线程类
    private String url;
    private String name;//保存文件名
    public TestThread2(String URL,String name){
        //构造方法
        this.url=URL;
        this.name=name;
    }
    //(下载图片)线程的执行体
//重写run方法
    public void run(){
        WebDownloader webDownloader=new WebDownloader();
        webDownloader.downloader(url,name);
        System.out.println("下载了"+name);
    }
    public static void main(String[] args) {
        TestThread2 t1=new TestThread2("https://i1.hdslb.com/bfs/archive/653b56c7b99e44b28e0f68c805e2d506908be8b3.jpg","1.jpg");
  TestThread2 t2=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-10-24/1034079770222137344.jpg","2.jpg");
     TestThread2 t3=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-11-04/1038170637430034432.jpg","3.jpg");
        //开启多个线程
        t1.start();
       t2.start();
       t3.start();

    }

}

运行结果: 

 代码:创建线程方式一:实现runnable接口

package Thread;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
class WebDownloader{
    public void downloader(String url,String name){
        try{//图片地址转文件
            FileUtils.copyURLToFile(new URL(url),new File(name));//import java.net.URL
        }catch (IOException e){
            e.printStackTrace();
            System.out.println("IO异常,downloader方法出现问题");
        }
    }}
public class TestThread2 implements Runnable{
    //实现线程类
    private String url;
    private String name;//保存文件名
    public TestThread2(String URL,String name){
        //构造方法
        this.url=URL;
        this.name=name;
    }
    //(下载图片)线程的执行体
//重写run方法
    public void run(){
        WebDownloader webDownloader=new WebDownloader();
        webDownloader.downloader(url,name);
        System.out.println("下载了"+name);
    }
    public static void main(String[] args) {
        TestThread2 t1=new TestThread2("https://i1.hdslb.com/bfs/archive/653b56c7b99e44b28e0f68c805e2d506908be8b3.jpg","1.jpg");
  TestThread2 t2=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-10-24/1034079770222137344.jpg","2.jpg");
     TestThread2 t3=new TestThread2("https://www.kuangstudy.com/uploadimg/course/2022-11-04/1038170637430034432.jpg","3.jpg");
        //开启多个线程
        new Thread(t1).start();
        new Thread(t2).start();
        new Thread(t3).start();

    }

}

区别:

 

扫描二维码关注公众号,回复: 14659990 查看本文章

小结:

>继承thread类

子类继承thread类具有多线程能力

启动线程:子类对象.start()

不建议使用,避免oop单继承局限性

>实现runnable接口

实现接口runnable具有多线程能力

启动线程:传入目标对象+Thread对象.start()

推荐使用,避免了单线程局限性,灵活方便,方便同个线程被多个对象使用

猜你喜欢

转载自blog.csdn.net/m0_67042480/article/details/129083713