多线程
线程概述
进程
在一个操作系统中,每一个独立执行的程序都可称为一个进程
对于CPU而言,在某个时间点只能运行一个程序,也就是说在某个时间点只能执行一个进程
线程
在一个进程中可以有多个执行单元同时执行,这些执行单元可以视为程序执行的一条条线索,被称为线程
操作系统中每一个进程中都只是存在一个线程
单线程程序
代码按照顺序依次往下执行,没有出现两段程序代码交替运行的效果
多线程程序
多段程序代码交替运行的效果,创建多个线程
多线程程序在运行时,每个线程之间都是独立的,它们并发执行
多线程机制是指能够在同一时间内同时执行多个操作
注意
- 进程包含线程
- 线程属于进程
- 每一个进程至少有一个线程
Java实现多线程的方法
继承Thread类
一个类只要继承了Thread类,就可以作为多线程操作类
在Thread子类中必须覆写Thread类的run()方法
run()方法中定义了线程要执行的代码
语法: class 类名 extends Thread{ 属性、方法, public void run(){ 线程主体} }
四个步骤:
- 定义一个类扩展Thread
- 覆写run()方法,这个方法实现线程要执行的操作
- 创建一个这个线程类的对象
- 调用start()方法启动线程对象
实现Runnable接口
Runnable接口只有一个方法run(),实现这个接口并把线程对象所要执行的操作代码写到run()方法中
实现Runnable接口创建和执行多线程:
- 定义一个类实现Runnable接口:implements Runnable
- 覆写其中的run()方法
- 创建Runnable接口实现类的对象
- 创建Thread类的对象(以Runnable子类对象为构造方法参数)
- 用start()方法启动线程
实现Runnable接口合适多个相同程序代码的线程去处理同一资源问题
除了上述两种之外,还可以用Timer和TimerTask实现
代码:
public class Example03 {
public static void main(String[] args){
MyThread2 my = new MyThread2();
Thread thread = new Thread(my);
thread.start();
while(true){
System.out.println("main()方法在运行");
}
}
}
class MyThread2 implements Runnable{
public void run(){
while(true){
System.out.println("MyThread类的run()方法在运行");
}
}
}
线程的优先级
线程的优先级不是固定不变的,线程的优先级用1~10之间整数表示,数字越大,优先级越高
线程的基本控制
- 线程睡眠:Thread.sleep( 单位毫秒)
- 线程挂起:Thread.wait(1000) 或者wait() 和notify()
- 线程让步:Thread.yield()
- 线程插队:Thread.join()
- 线程检查:Thread.isAlive()
- 结束线程:自然消亡和Thread.stop() 强制停止
线程的不同状态
线程整个生命周期分为五阶段:新键状态(new)–>就绪状态(Runnable)–>运行状态(Running)–>阻塞状态(Blocked)–>死亡状态(Terminated)
注意
- 只有就绪状态才可以转换为运行状态
- 线程从阻塞状态只能进入就绪状态