Loading

Java多线程03-法2实现Runnable接口

03、实现Runnable接口

  • 定义TestThread3实现Runnable接口
  • 实现run方法,编写方法体
  • 创建线程对象,调用start()方法启动线程

代码演示

//创建线程的方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
//如果选择继承Thread来启用多线程则只能继承一个类,若使用Runnable则可以实现多个接口,继承其他类
//接口当然不能被实例化,但可以实例化实现接口的对象,该对象也可以说是接口对象
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() {
        MyDownloader myDownloader=new MyDownloader();
        myDownloader.WebDownder(url,name);
        System.out.println("文件下载成功:"+name);
    }

    public static void main(String[] args) {
        TestThread3 testThread301=new TestThread3("http://8.136.39.89:9090/asserts/img/portfolio-1.jpg","portfolio-1.jpg");
        TestThread3 testThread302=new TestThread3("http://8.136.39.89:9090/asserts/img/portfolio-2.jpg","portfolio-2.jpg");
        TestThread3 testThread303=new TestThread3("http://8.136.39.89:9090/asserts/img/portfolio-3.jpg","portfolio-3.jpg");
        new Thread(testThread301).start();//查看Thread方法中可知构造方法中有Runnable参数构造发法 避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
        new Thread(testThread302).start();//public Thread(Runnable target){init(null, target, "Thread-" + nextThreadNum(), 0);}
        new Thread(testThread303).start();//任何实现了Runnable接口的对象都可以当参数丢进构造器中,其实Thread本身也实现了Runnable
    }
}


class MyDownloader{
    public void WebDownder(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

小结

  • 继承Thread
    • 子类继承Thread类具备多线程能力
    • 启动线程:子类对象.start()
    • 不建议使用:避免OOP单继承局限性
  • 实现Runnable接口
    • 实现接口Runnable具有多线程能力
    • 启动线程:传入目标对象+Thread对象.start()
    • 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
posted @ 2022-02-12 23:57  Cn_FallTime  阅读(49)  评论(0编辑  收藏  举报