天天看点

【多线程】LockSupport 使用 原理 源码 分析1.概述1. LockSupport类介绍

【多线程】LockSupport 使用 原理 源码 分析1.概述1. LockSupport类介绍

1.概述

前半部分完全转载:https://segmentfault.com/a/1190000014436679

1. LockSupport类介绍

LockSupport类可以

阻塞当前线程

以及

唤醒指定被阻塞

的线程。主要是通过

park()

unpark(thread)

方法来实现阻塞和唤醒线程的操作的。

每个线程都有一个许可(permit),permit只有两个值1和0,默认是0。

  1. 当调用

    unpark(thread)

    方法,就会将thread线程的许可permit设置成1(注意多次调用unpark方法,不会累加,permit值还是1)。
  2. 当调用

    park()

    方法,如果当前线程的

    permit是1

    ,那么将permit设置为0,并立即返回。如果当前线程的permit是0,那么当前线程就会阻塞,直到别的线程将当前线程的permit设置为1.park方法会将permit再次设置为0,并返回。

注意:

因为permit默认是0,所以一开始调用park()方法,线程必定会被阻塞