多线程专栏------多线程的基础知识(一)


1、进程&线程

1.1、什么是进程

  • 进程是程序的一次执行过程,是系统运行程序的基本单位。是操作系统进行资源分配和调度的一个独立单位。
    例如:比如打开浏览器、IntelliJ IDEA、微信等都是进程。

1.2、什么是线程

  • 程序执行以线程方式执行。线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。

1.3、进程与线程的区别

进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个主线程。

  1. 进程是资源分配的最小单位,线程是CPU调度的最小单位。
  2. 线程隶属于某一个进程,共享所属进程的资源。线程只由堆栈寄存器、程序计数器和TCB构成。
  3. 进程可以看作独立的应用,线程不能看作独立的应用。
  4. 进程有独立的地址空间,相互不影响,而线程只是进程的不同执行路径,如果线程挂了,进程也就挂了。所以多进程的程序比多线程程序健壮,但是切换消耗资源多。

2、线程的生命周期

2.1、新建(New)

  • 使用new Thread() 创建一个线程之后。

2.2、运行(Runnable)

  • 使用Thread.start()方法之后。启动一个线程,该线程会进入等待队列等待CPU的执行,因此可以细分为runnable和running状态。

2.3、无限等待(Waiting)

  • 处于这种状态的线程,不会被分配CPU执行时间,需要等待其他线程显式地唤醒,然后进入运行状态。

    • 调用Thread.join() 方法。将会一直等待上一个线程的执行结束,然后被上一个线程唤醒。
    • 调用Object.wait() 方法。将会一直等待,直到其他线程中使用了notify()、notifyAll()进行唤醒。

2.4、计时等待(Timed Waiting)

  • 处于这种状态的线程,不会被分配CPU执行时间,既可以被其他线程显式地唤醒,也可以在一定时间后由系统自动唤醒,然后进入运行状态。

    • 调用Thread.sleep(timeout) 方法。该方法不会释放持有的对象锁。
    • 调用Object.wait(timeout) 方法。该方法会释放持有的锁。
    • 调用Thread.join(timeout) 方法。

2.5、阻塞(Blocked)

  • 阻塞和等待的区别在于,阻塞是在等待获取一个排它锁,因为该线程获取不到锁所以被阻塞住而不能允许;而等待则是等待一段时间或者是等待被唤醒,等待状态并不是等待获取锁。这个状态有个特点,一个线程请求锁,得到之后该线程进入阻塞状态;而其他线程再来请求锁,由于得不到而阻塞;当该锁释放后,被阻塞的线程得到锁就进入了运行状态。

    • 由synchronized 修饰的代码块、方法。使得线程之间有并行变成串行执行。
    • IO操作,也是串行执行。

2.6、结束(terminated)

  • 当线程的run() 方法执行结束后,该线程就结束了。
    在这里插入图片描述

3、线程中的常用方法

  • start():1 启动线程 2 调用线程的run()
  • run():将线程要执行的操作,声明在run()中
  • currentThread():获取当前执行代码对应的线程
  • getName():获取线程名
  • setName():设置线程名
  • sleep(long millis):静态方法,调用时,可以使得当前线程睡眠指定的毫秒数
  • yield():静态方法,一旦执行此方法,就释放CPU的执行权
  • join():在线程a中通过线程b调用join(),意味着线程a进入堵塞状态,直到线程b执行结束,线程a才结束堵塞状态,继续执行下面操作
  • isAlive():判断当前线程是否存活

4、线程的优先级

  • getPriority():获取线程的优先级
  • setPriority():设置线程的优先级,范围[1,10]
    • Thread类内部声明的三个优先级常量:
      • MAX_PRIORITY(10):最高优先级
      • MIN _PRIORITY (1):最低优先级
      • NORM_PRIORITY (5):普通优先级,默认情况下main线程具有普通优先级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值