线程的创建之继承Thread类

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

1. 过程

  1. 自定义线程类继承Thread类。
  2. 重写run()方法,编写线程执行体。
  3. 创建线程对象,调用start()方法启动线程。

线程不一定立即执行,CPU安排调度。

2. 注意点

  1. run()方法和start()方法的区别

    image-20210820235038265
    Image

3. 使用

public class Demo1 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 200; i++) {
            System.out.println(i + "run");
        }
    }

    public static void main(String[] args) {
        new demo1().start();

        for (int i = 0; i < 200; i++) {
            System.out.println(i + "main");
        }
    }
}

可以发现 start() 开启的线程和主线程是交替执行的。

而直接调用 run() 方法,会发现先执行run()方法,再执行主线程:

4. 利用多线程下载网图

public class Demo2 extends Thread{

    private String url;
    private String name;

    public Demo2(String url, String name) {
        this.url = url;
        this.name = name;
    }

    @Override
    public void run() {
        new WebDownloader().downloader(url,name);
    }

    public static void main(String[] args) {
        new Demo2("https://cdn.jsdelivr.net/gh/rootwhois/oss@main/uPic/image-20210820235038265.png", "1.png").start();
        new Demo2("https://cdn.jsdelivr.net/gh/rootwhois/oss@main/uPic/image-20210820235038265.png", "2.png").start();
        new Demo2("https://cdn.jsdelivr.net/gh/rootwhois/oss@main/uPic/image-20210820235038265.png", "3.png").start();

    }
}

class WebDownloader{
    public void downloader(String path, String name){
        try {
            FileUtils.copyURLToFile(new URL(path), new File(name));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Copyright © rootwhois.cn 2021-2022 all right reserved,powered by GitbookFile Modify: 2023-03-05 10:55:52

results matching ""

    No results matching ""