九、多线程

多线程

线程概述

进程

在一个操作系统中,每一个独立执行的程序都可称为一个进程

对于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)

注意

  • 只有就绪状态才可以转换为运行状态
  • 线程从阻塞状态只能进入就绪状态

猜你喜欢

转载自blog.csdn.net/weixin_42248871/article/details/115323545