线程的创建之继承Thread类
不建议使用:避免OOP单继承局限性
1. 过程
- 自定义线程类继承Thread类。
- 重写run()方法,编写线程执行体。
- 创建线程对象,调用start()方法启动线程。
线程不一定立即执行,CPU安排调度。
2. 注意点
run()方法和start()方法的区别
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();
}
}
}