目录
线程相关概念
-
程序:是一些指令的集合,也就是我们写的代码
-
进程:就是运行中的程序,操作系统会为一个进程分配内存空间,分配资源。
进程是程序的一次执行过程,是动态过程:有它自身的产生、存在和消亡的过程
-
线程:由进程创建的,是进程的一个实体,一个进程可以拥有多个线程
-
单线程:一个时刻只允许一个线程
-
多线程:一个时刻可以有多个线程
-
-
并发:同一个时刻,多个任务交替执行,造成一种“貌似同时”的错觉,单核CPU实现的多任务就一定是并发
-
并行:同一个时刻,多个任务可以同时执行。需要多核CPU实现并行
- 电脑中并发和并行会同时存在
线程的创建
Thread
通过继承Thread类,调用class.start()方法开启一个线程
package com.pc.threadUse;
public class Thread01 {
public static void main(String[] args) throws InterruptedException {
//创建Cat,可以当做线程使用
Cat cat = new Cat();
/**这里不用run的原因,是因为run方法就是一个普通的方法,相当于函数调用
* 不会真正的启动一个线程,也就是会阻塞主线程。
* */
cat.start();//启动线程
/**追源码发现,start方法使用的是start0()这个方法,
* start0()是native方法,由JVM调用,最终交给操作系统进行统一调度
* 涉及到操作系统的调度知识
* start0()是真正启用线程的函数
* */
//main启动一个子线程后,Thread-0,主线程不会阻塞在这里
System.out.println("主线程继续执行" + Thread.currentThread().getName());
for (int i=0; i < 10; i++) {
System.out.println("主线程");
Thread.sleep(1000);
}
}
}
class Cat extends Thread {
int time = 0;
@Override
public void run() {
//创建Cat对象,可以当做线程使用
while (time < 80) {
System.out.println("喵喵,我是一只小猫咪" + (++time) + "线程名称:" + Thread.currentThread().getName());
//休眠一秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.pr