根据目录选择学习!
文章目录
1、线程Thread、进程Process
- 进程:正在进行中的程序,一个程序的执行过程
- 线程:属于进程,指的是一个可以独立运行的代码片段(执行单元、执行路径)
- 程序是指令和数据的有序集合
- 一个进程可以有多个线程(至少有一个线程),线程是CPU调用和执行的单位
- main()主线程,是系统的入口,用于执行整个程序
2、线程创建
法一:继承Thread类
- 自定义线程类继承Thread类
- 重写run()方法,编写线程执行体
- 创建线程对象,调用start()开启线程
public class ThreadDemo1 extends Thread {
// 线程入口点
@Override
public void run() {
// run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码---" + i);
}
}
public static void main(String[] args) {
// main主线程
// 创建一个线程对象
ThreadDemo1 threadDemo1 = new ThreadDemo1();
// 调用start()方法开启线程
threadDemo1.start();
for (int i = 0; i < 200; i++) {
System.out.println("我在学习多线程---" + i);
}
}
}
案例:下载图片
1.写一个下载方法类
2.写一个线程类(继承Thread),重写run()方法(线程执行体)
3.主线程中,start()
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
// 实现多线程同步下载图片
public class TestThread1 extends Thread {
private String url;
private String name;
public TestThread1(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);
}
public static void main(String[] args) {
TestThread1 t1 = new TestThread1("https://scpic.chinaz.net/files/pic/pic9/202009/apic27858.jpg", "冬季唯美山水风景图片.jpg");
TestThread1 t2 = new TestThread1("https://ts1.cn.mm.bing.net/th/id/R-C.df4462fabf18edd07195679a5f8a37e5?rik=FnNvr9jWWjHCVQ&riu=http%3a%2f%2fseopic.699pic.com%2fphoto%2f50059%2f8720.jpg_wh1200.jpg&ehk=ofb4q76uCls2S07aIlc8%2bab3H5zwrmj%2bhqiZ%2fyw3Ghw%3d&risl=&pid=ImgRaw&r=0", "九寨沟山水自然美景.jpg");
TestThread1 t3 = new TestThread1("https://desk-fd.zol-img.com.cn/t_s960x600c5/g1/M0B/03/06/ChMljl402K6IOTZbAARWayFg6S4AAQJPwFhuRIABFaD752.jpg", "美丽迷人的山水风景图片.jp