多线程04:实现Runnable接口

方式二、实现Runnable接口,学习提示:查看JDK帮助文档
 
  • 定义MyRunnable类实现Runnable接口
  • 实现run()方法,编写线程线程执行体
  • 创建线程对象,调用start()方法启动线程

 1 package com.thread.demo01;
 2 
 3 //创建线程方式二: 实现Runnable接口 ,重写run方法 ,执行线程需要丢入runnable接口实现类,调用start()方法
 4 public class TestThread03 implements Runnable {
 5 
 6     @Override
 7     public void run() {
 8         for (int i = 0; i < 20; i++) {
 9             System.out.println("我在看代码---" + i);
10         }
11     }
12 
13     public static void main(String[] args) {
14 
15         //创建一个runnable接口类的实现类对象
16         TestThread03 testThread03 = new TestThread03();
17 
18         //创建线程对象,通过线程对象来开启我们的线程,代理
19 
20         new Thread(testThread03).start();
21 
22         for (int i = 0; i < 100; i++) {
23             System.out.println("我在学习多线程--" + i);
24         }
25     }
26 }
改造刚才的多线程下载图片:
 1 package com.thread.demo01;
 2 
 3 import org.apache.commons.io.FileUtils;
 4 
 5 import java.io.File;
 6 import java.io.IOException;
 7 import java.net.URL;
 8 
 9 //练习Thread实现一个多线程同步下载图片
10 public class TestThread02 implements Runnable {
11 
12     private String url; //网络图片地址
13     private String name;//保存的文件名
14 
15     public TestThread02(String url, String name) {
16         this.url = url;
17         this.name = name;
18     }
19 
20     //下载图片线程的执行体
21     @Override
22     public void run() {
23         WebDownloader webDownloader = new WebDownloader();
24         webDownloader.downloader(url, name);
25         System.out.println("下载了文件名:" + name);
26     }
27 
28     public static void main(String[] args) {
29         TestThread02 t1 = new TestThread02("http://a3.att.hudong.com/35/34/19300001295750130986345801104.jpg", "1.jpg");
30         TestThread02 t2 = new TestThread02("http://file02.16sucai.com/d/file/2014/1028/f445fe013d861d9e99fd70a0734efd8a.jpg", "2.jpg");
31         TestThread02 t3 = new TestThread02("http://img.tuzhaozhao.com/2017/10/25/1f33b154b2da3f51_300x300.jpg", "3.jpg");
32 
33         new Thread(t1).start();
34         new Thread(t2).start();
35         new Thread(t3).start();
36 
37     }
38 }
39 
40 //下载器
41 class WebDownloader {
42     //下载方法
43     public void downloader(String url, String name) {
44         try {
45             FileUtils.copyURLToFile(new URL(url), new File(name));
46         } catch (IOException e) {
47             e.printStackTrace();
48             System.out.println("IO异常,downloader方法出现问题");
49         }
50     }
51 }
52 
53 结果:
54 下载了文件名:1.jpg
55 下载了文件名:3.jpg
56 下载了文件名:2.jpg
小结:
 
  1. 继承Thread类
  • 子类继承Thread类具有多线程能力,Thraed也实现了Runnable接口
  • 启动线程:子类对象.start()
  • 不建议使用:避免OOP单继承局限性
 
  1. 实现Runnable接口
  • 实现接口Runnable接口具有多线程能力
  • 启动线程:传入目标对象+Thread对象.start()
  • 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用


原文地址:https://www.cnblogs.com/duanfu/p/12260456.html