多线程

多线程

线程的定义

  • 线程 Thread
  • 进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。
  • 线程又被称为轻量级进程(lightweight process)
  • 如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程

线程的特点

  • 轻量级进程
  • 独立调度的基本单位
  • 可并发执行
  • 共享进程资源

多线程的优缺点:

优点:有良好的资源使用率;程序设计在某些情况更简单;程序相应速度更快

缺点:设计更复杂上下文切换存在开销 ,消耗资源

线程与进程的区别:

在这里插入图片描述

线程的两种创建方法:

类:Extends Thread

public class 类名 Extends Thread{
//重写run方法
@Overrdie
    public void run(){
    //方法体
    }


public static void main (String[]args){{
    类名 对象名=new 类名();
    Thread 对象名1=new Thread(对象名);
        对象名1.start( );
    }
}

接口:impleements Runnable

public class 类名 impleements Runnable{
//重写run方法
@Overrdie
    public void run(){
    //方法体
    }


public static void main (String[]args){{
     类名 对象名=new 类名();
    Thread 对象名1=new Thread(对象名);
        对象名1.start( );
    }
   
}

两种线程创建方式的比较:

• 继承Thread类方式的多线程

​ • 优势:编写简单

​ • 劣势:无法继承其它父类

• 实现Runnable接口方式的多线程

​ • 优势:可以继承其它类,多线程可共享同一个Runnable对象

​ • 劣势:编程方式稍微复杂,如果需要访问当前线程,需要调用Thread.currentThread()方法

• 实现Runnable接口方式要通用一些。

线程的生命周期:

在这里插入图片描述

  • 新建状态:NEW

    • 用new关键字建立一个线程对象后,该线程对象就处于新生状态。
    • 处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态
  • 就绪状态:RUNNABLE

    • 处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分配CPU
    • 当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称之为“cpu调度”。
  • 运行状态:RUNNABLE

    • 如果就绪状态的线程获取 CPU 资源,就可以执行run(),此时线程便处于运行状态
  • 阻塞状态:BLOCKED

    • 被阻塞等待监视器锁定的线程处于此状态。
    • 等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。
    • 同步阻塞:线程在获取 synchronized同步锁失败(因为同步锁被其他线程占用)。
    • 其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O请求时,线程就会进入到阻塞状态。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。

​ 三种方法可以进入阻塞状态:sleep方法使进程进入睡眠(抱资源睡眠)yield方法让当前正在运 行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会。 (礼让)join方法插队

  • 死亡状态:TERMINATED
    • 死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有三个。一个是正常运行的线程完成了它的全部工作;另一个是线程被强制性地终止,如通过执行stop方法来终止一个线程[不推荐使用】,三是线程抛出未捕获的异常。
线程的基本功能

在这里插入图片描述

线程优先级:

线程优先级从小到大为:1-10

系统默认优先级为5级

线程调度器按照优先级来决定调度哪个线程先来执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值