风在路上 风在路上
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)

风

摸鱼
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)
  • Java-基础

  • Java-多线程

    • 多线程
    • 多线程基础
    • 多线程进阶-JUC
    • 多线程进阶-JMM
    • 多线程进阶-volatile
    • 多线程进阶-单例模式升级
    • 多线程进阶-深入理解CAS
    • 多线程进阶-park和unpark
      • 7、park和unpark
        • 注意:
        • 特点
        • 补充知识:线程的六种状态
    • 多线程进阶-深入理解AQS
  • Java8新特性

  • JavaWeb

  • JVM

  • Java
  • Java-多线程
zdk
2022-01-06
目录

多线程进阶-park和unpark

Table of Contents generated with DocToc (opens new window)

  • 7、park和unpark
    • 注意:
    • 特点
    • 补充知识:线程的六种状态

# 7、park和unpark

park和unpark是LockSupport类中的方法

//暂停当前线程
LockSupport.park();

//恢复某个线程
LockSupport.unpark(暂停线程对象);
1
2
3
4
5

先 park 再unpark

   Thread thread = new Thread(() -> {
            System.out.println("start.....");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("park....");
            LockSupport.park();
            System.out.println("resume.....");

        });
        thread.start();
        Thread.sleep(2000);
        System.out.println("unpark....");
        LockSupport.unpark(thread);
//运行结果
start.....
park....
unpark....
resume.....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 注意:

  1. park 中的线程,处于 WAIT 状态
  2. unpark 既可以在 park 之前调用或之后调用,都是用来恢复某个线程的运行,简单的说,调用 unpark 后再调用 park 线程依然不会暂停,类似提前“解毒”。

# 特点

与Object的wait、notify相比

  • wait、notify和notifyAll必须配合Object Monitor一起使用(即必须在有锁的情况下使用),而park/unpark不用
  • park/unpark配对使用能够精确的指定具体的线程的阻塞/运行,而notify只能随机唤醒一个等待线程,notifyAll是唤醒所有等待线程,不精确
  • park/unpark可以先unpark,而wait/notify不能先notify

# 补充知识:线程的六种状态

  1. NEW:线程刚刚被创建时,还没有start()的状态
  2. RUNABLE: Java中的RUNABLE包含了操作系统层面的运行,阻塞,可运行状态。 操作系统层面的线程的运行,阻塞等在Java层面无法体现出来。 BLOCKED,WAITING,TIMED_WAITINGJava API层面的阻塞
  3. TIMED_WAITING:使用sleep方法可能会出现
  4. WAITING: 使用join,wait方法后可能会出现
  5. BLOCKED:使用synchronize方法可能会出现
  6. diey:线程运行结束
在 GitHub 上编辑此页 (opens new window)
#多线程#park
最后更新: 2022/10/04, 16:10:00
多线程进阶-深入理解CAS
多线程进阶-深入理解AQS

← 多线程进阶-深入理解CAS 多线程进阶-深入理解AQS→

Theme by Vdoing | Copyright © 2022-2025 zdk | notes
湘ICP备2022001117号-1
川公网安备 51142102511562号
本网站由 提供CDN加速/云存储服务
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式