zoukankan      html  css  js  c++  java
  • 多线程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()
    • 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用


  • 相关阅读:
    LOJ #6669 Nauuo and Binary Tree (交互题、树链剖分)
    BZOJ 4734 UOJ #269 [清华集训2016]如何优雅地求和 (多项式)
    UOJ #268 BZOJ 4732 [清华集训2016]数据交互 (树链剖分、线段树)
    Codeforces 1276C/1277F/1259F Beautiful Rectangle (构造)
    UOJ #164 [清华集训2015]V (线段树)
    python – time.sleep – 睡眠线程
    GIL(全局解释器锁)与互斥锁
    python theading线程开发与加锁、信号量、事件等详解
    python装饰器概念与应用
    python中for循环的底层实现机制 迭代
  • 原文地址:https://www.cnblogs.com/duanfu/p/12260456.html
Copyright © 2011-2022 走看看