多线程(多个线程并发执行)
- 并发:指两个或者多个任务在同一时间段内发生
- 并行:指两个或者多个任务在同一时刻段内发生
一、概述
进程 正在运行程序的实例,可以包含若干个线程,执行程序的一次过程,是个动态的概念
线程 Thread 线程是程序中执行的线程,是指进程的一个独立执行单元,一会进程可以同时并发运行多个线程
二、线程创建
创建方式
- 第四种:线程池
第一种方式 Thread
代码如下
package com.gdh.thread;
//创建线程方式一:继承Thread 重写run方法()方法,调用start开启线程
/*
线程启动不一定是立即执行,需要CUP调度执行
*/
public class TestThread01 extends Thread {
@Override
public void run() {
//super.run();
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在看视频" +i);
}
}
public static void main(String[] args) {
//创建线程对象
TestThread01 thread01 = new TestThread01();
//调用start()方法开启线程 run()方法是依次执行 start()同时执行
thread01.start();
//main线程 主线程
for (int i = 0; i < 2000; i++) {
System.out.println("我在学习多线程"+i);
}
}
}
练习thread,实现多线程同步下载图片
package com.gdh.thread;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//练习thread,实现多线程同步下载图片
public class TestThread02 extends Thread{
private String url;
private String name;
public TestThread02(String url, String name) {
this.url = url;
this.name = name;
}
@Override
public void run() {
WebDownloader webDownloader = new WebDownloader();
webDownloader.downLocader(url,name);
System.out.println(name);
}
public static void main(String[] args) {
TestThread02 t1 = new TestThread02("https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/searchbox/nicon-10750f3f7d.png", "1.png");
TestThread02 t2 = new TestThread02("https://music.163.com/#/song?id=569200213", "1.song");
TestThread02 t3 = new TestThread02("https://music.163.com/#/mv?id=5958062",