首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

话说 LockSupport

LockSupport LockSupport要从wait/notify/notifyAll 、condition.await/signal/signalAll 说起 在JUC包中很多地方都会使用到LockSupport...比如我们前边写的ReentrantLock中,获取锁失败之后会加入队列调用LockSupport.park() 等待前边一个获取锁的线程unpark自己 下边以小强和小月月用同一个水杯喝水为例 讲解...wait/notify 、await/signal 、park/unpark 一、 wait notify wait nofity 的详细讲解 前边文章有写过 这里只是简单实用 仅为了与LockSupport...很明显看出来了, 1.LockSupport 与wait/condition.await最大的区别就是 他不要锁,不需要在锁代码块中使用 3.2 不分顺序 LockSupport还有一个特点就是unpark...(LockSupport.java:175) at vip.freeedu.TestParkUnpark04.xiaoqiang02(TestParkUnpark04.java:25)

41300

LockSupport源码解析

JUC包中进行线程阻塞和线程唤醒的时候使用了一个工具类,这个类就是LockSupport,在AQS中对线程的阻塞和唤醒就是依靠此类完成的,那么LockSupport是如何实现的里?...首先引入眼帘的是LockSupport的静态代码块,发现使用到了Unsafe的内存操作。如果用内存操作那么肯定要用到偏移量什么了,这在代码均有体现。...但是发现在LockSupport类中好像就剩下方法了。那么还是按照之前的操作,从加锁开始吧。。...如果这样的话,LockSupport就成为皇家专属产品,我们这种屌丝看来也用不到了。。zz,是这样么?咋还是不要轻易下结论。...= null) UNSAFE.unpark(thread); } 总结一下LockSupport 第一为是阻塞线程和唤醒线程,同时LockSupport提供了多种阻塞的方法

35640

了解过LockSupport

LockSupport是JUC包下的一个类,是用来创建锁和其他同步类的基本线程阻塞原语。 相信大多数人看了这句话也还是不太明白它到底是啥东西,那你还记得等待唤醒机制吗?...之前实现等待唤醒机制可以用wait/notify,可以用await/signal,这个LockSupport就是它们的改良版。 2. 等待唤醒机制: 先来回顾一下等待唤醒机制。...LockSupport怎么用? LockSupport主要就是用park(等待)和unpark(唤醒)方法来实现等待唤醒。...) -> { System.out.println("线程" + Thread.currentThread().getName() + "进来了"); LockSupport.park...LockSupport总结:是一个线程阻塞唤醒的工具类,所有方法都是静态方法,可以让线程在任意位置阻塞,其底层调用的是UNSAFE类的native方法。

30620

了解LockSupport工具类

而UNSAFE的park方法是一个native方法,调用的C的类库了,没办法继续看下去了,因为我也不会C 所以我们大概知道这么多就可以了,当然有一点非常重要,那就是LockSupport在进行线程阻塞和唤醒的时候是不需要获取锁的...作用:   park:阻塞一个线程   unpark:唤醒一个线程   他是构建同步组件的基础工具 为什么说是构建同步组件的基础工具呢,是因为AQS中的阻塞和唤醒就是基于LockSupport做的 ?...来完成的锁,所以说他是构建同步组件的基础工具 好了,了解这些就足够了,再深层次的,就不是这个阶段,所能看得懂的了 我看网上都写了一个小Demo,我觉的没有太大的实际意义,至少我在开发中,从来没有直接用过LockSupport

30851

Java并发编程之LockSupport

简介 LockSupport是一个工具类,提供了基本的线程阻塞和唤醒功能,它是创建锁和其他同步组件的基础工具,内部是使用sun.misc.Unsafe类实现的。...LockSupport和使用它的线程都会关联一个许可,park方法表示消耗一个许可,调用park方法时,如果许可可用则park方法返回,如果没有许可则一直阻塞直到许可可用。...阻塞和唤醒实例 子线程执行LockSupport.park(),由于没有许可,进入阻塞状态。主线程3秒后调用unpark方法给子线程增加了一个许可,park方法返回,子线程被唤醒继续执行。...(Thread.currentThread()); System.out.println("unpark 1"); LockSupport.unpark(...Thread类有一个变量为parkBlocker,对应的就是LockSupport的park等方法设置进去的阻塞对象。

34520

Java Review - 并发编程_LockSupport

LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类的方法的线程是不持有许可证的。...主要方法 void park() 如果调用park方法的线程已经拿到了与LockSupport关联的许可证,则调用LockSupport.park()时会马上返回,否则调用线程会被禁止参与线程的调度,也就是会被阻塞挂起...void unpark(Thread thread) 当一个线程调用unpark时,如果参数thread线程没有持有thread与LockSupport类关联的许可证,则让thread线程持有。...(Thread.currentThread()); LockSupport.park(); System.out.println("end park");...void parkNanos(long nanos) 和park方法类似,如果调用park方法的线程已经拿到了与LockSupport关联的许可证,则调用LockSupport.parkNanos(long

38140

Java 并发编程(一) → LockSupport 详解

简介   关于 LockSupport,我们对它感到很陌生,因为我们在工作中很少直接接触到它,但多多少少,我们都间接用到过它   LockSupport 是 JUC 包下很重要的一个工具类,我们来看看它的源码概述...实现线程的阻塞与唤醒   我们可以简单的认为 LockSupport 对 Java 线程(操作系统线程)的阻塞与唤醒进行了封装,简化了开发人员的任务   permit(许可证)   LockSupport...的设计思路就是为每一个线程设置一个 permit,其实就是一个值,类似于 AQS 中的 state   但 permit 没有显示的存在于 LockSupport 的源码中,而 state 却显示的存在于...使用场景   因为 JDK 已经提供了丰富的 API,所以我们平时基本不会直接使用 LockSupport,所以很多人认为 LockSupport 离我们很远   其实不然,只要我们用到 JUC 下的类来进行并发编程...,那么就已经间接用到了 LockSupport 了   JUC 中线程的阻塞与唤醒的实现,依赖的都是 LockSupport   线程交替打印     这是楼主之前遇到的一个面试题,LockSupport

50430

LockSupport与线程中断

引言 LockSupport 线程中断机制 什么是中断机制?...LockSupport 类使用了一种名为 Permit(许可)的概念做到阻塞和唤醒线程功能,每一个线程都有一个许可(permit)与 Semaphore 不同,LockSupport 许可上限是 1 主要方法...通过 LockSupport 调用 park 方法的执行过程 permit 许可证默认没有,不能放行 所以一开始调用 park 方法但前线程就会阻塞, 直至别的线程调用 unpark 为当前线程发放...permit,park方法才会唤醒 unpark 与 park 类似均调用自 UNSafe 类中的 unpark 方法 基于 LockSupport 实现等待唤醒 Thread t1 =...与 Object 和 Condition 先比的优点 方法的调用不在依赖于锁的环境 LockSupport 支持先唤醒后等待 unpark 发放的许可上限为 1

7510

JDK8源码分析之LockSupport

二、LockSupport源码分析   2.1 类的属性  ? ?...2.2 类的构造函数  // 私有构造函数,无法被实例化 private LockSupport() {}   说明:LockSupport只有一个私有构造函数,无法被实例化。   ...2.3 核心函数分析   在分析LockSupport函数之前,先引入sun.misc.Unsafe类中的park和unpark函数,因为LockSupport的核心函数都是基于Unsafe类中定义的park...package com.hust.grid.leesf.locksupport; import java.util.concurrent.locks.LockSupport; class MyThread...简而言之,当调用LockSupport.park时,表示当前线程将会等待,直至获得许可,当调用LockSupport.unpark时,必须把等待获得许可的线程作为参数进行传递,好让此线程继续运行。

56710
领券