线程实现(重点)
多线程三个方法
继承Thread类
⭐️实现Runnable
实现callable(了解)
线程状态 出生-?
线程同步(重点)
(多个线程操作同一个对象,那个对象出现了不安全情况,怎办?买火车票例子)
线程如何通信
高级主题 线程池 定时器
一、基础概念
进程里多个线程。
程序是静态概念。程序代码跑起来是进程(只是系统资源分配的单位)。一个进程里多个线程。真正执行的是多线程。
默认线程:main是主线程(用户线程)。GC(垃圾回收线程)(JVM分配的,又叫守护线程)
线程的运行由CPU(调度器)来调度。
二、继承Thread 类
继承Thread 类。重写run 方法,然后创建一个对象,调用start(注意⚠️不是run方法)
run (先执行run,再执行main)
start (同步执行)开辟子线程,主线程继续执行。但是线程开启之后,不一定立即执行,而是CPU来调度。
public class NewTest extends Thread {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("子线程+"+i);
}
}
public static void main(String[] args) {
NewTest test = new NewTest();
test.start();
for (int i = 0; i < 200; i++) {
System.out.println("主线程"+i);
}
}
}
三、实现 Runnable接口
⭐️推荐使用实现Runnable接口,达到多线程的方法,因为JAVA有单继承局限性。就是一个类只能继承一个类。
而通过实现Runnable接口, 可以避免单继承的局限性,方便同一个对象被多个线程使用 。
通过继承Thread 类,和 实现 Runnable接口实现多线程的最主要区别。
就是启动线程的地方不太一样。仅此而已哇。
左边是继承Thread 类,右边是实现 Runnable接口。