3.Runnable

线程的创建

Thread,Runnable,Callable

Thread class 继承Thread类(重点)

Runnable 接口 实现Runnable接口(重点)

Callable 接口 实现Callable接口(了解)

Runnable

定义MyRunnable类实现Runnable接口

实现run()方法,编程线程执行体

创建线程对象,调用start()方法启动线程

 

小结:

继承Thread类

子类继承Thread类具备多线程能力

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

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

 

实现Runnable接口

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

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

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

package com.ning;

//练习Thread,实现多线程同步下载图片

import org.apache.commons.io.FileUtils;

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

public class TestThread2 implements Runnable {

  private String url; //网络图片地址
  private String name; //保存的文件名

  public TestThread2(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);
      System.out.println("下载的文件地址:"+url);
  }

  public static void main(String[] args) {
      TestThread2 t1 = new TestThread2("https://pic.imgdb.cn/item/5ff74c313ffa7d37b3912223.jpg","1.jpg");
      TestThread2 t2 = new TestThread2("https://pic.imgdb.cn/item/5ff74c313ffa7d37b3912223.jpg","2.jpg");
      TestThread2 t3 = new TestThread2("https://pic.imgdb.cn/item/5ff74c313ffa7d37b3912223.jpg","3.jpg");

      new Thread(t1).start();
      new Thread(t2).start();
      new Thread(t3).start();

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

}

//下载器
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异常,downloader出现问题");
      }
  }
}
package com.ning;

//创建线程方式2:实现runnable接口,重写run方法,执行线程所需要丢入runnable接口实现类,调用start方法

public class TestThread3 implements Runnable {

  @Override
  public void run() {
      //run方法线程体
      for (int i = 0; i < 20; i++) {
          System.out.println("干啥呢"+i);
      }
  }

  public static void main(String[] args) {
      //创建runnbale接口的实现类对象
      TestThread3 testThread3 = new TestThread3();
      //创建线程对象,通过线程对象来开启我们的线程, 代理
      //Thread thread = new Thread(testThread3);
      //thread.start();
      new Thread(testThread3).start();

      for (int i = 0; i < 20; i++) {
          System.out.println("多线程"+i);
      }
  }
}

 

posted @ 2021-09-29 11:21  乔治爱放屁  阅读(258)  评论(0编辑  收藏  举报