当前位置: 首页 > news >正文

网站建设运营策划书/网站推广软件免费观看

网站建设运营策划书,网站推广软件免费观看,万能浏览器官方免费版,网站建设作业素材【JUC】 LockSupport类的park等待和unpark唤醒 文章目录【JUC】 LockSupport类的park等待和unpark唤醒1. 概述2. API解释3. 代码示例3.1 先等待再唤醒3.2 先唤醒再等待4. 区别4.1 wait和notify的限制4.2 await和signal的限制1. 概述 LockSuppot:用于创建锁和其他同…

【JUC】 LockSupport类的park等待和unpark唤醒

文章目录

  • 【JUC】 LockSupport类的park等待和unpark唤醒
    • 1. 概述
    • 2. API解释
    • 3. 代码示例
      • 3.1 先等待再唤醒
      • 3.2 先唤醒再等待
    • 4. 区别
      • 4.1 wait和notify的限制
      • 4.2 await和signal的限制

1. 概述

LockSuppot:用于创建锁和其他同步类的基本线程阻塞原语。

这个类与每个使用它的线程相关联,一个许可证(在Semaphore类的意义上)。 如果许可证可用,则呼叫parkpark返回,在此过程中消耗它; 否则可能会阻止。 致电unpark使许可证可用,如果尚不可用。 (与信号量不同,许可证不能累积,最多只有一个。)

LockSupport类使用了一种名为Permit(许可)的概念来做到阻塞和唤醒线程的功能, 每个线程都有一个许可(permit),permit只有两个值1和零,默认是零。可以把许可看成是一种(0,1)信号量(Semaphore),但与 Semaphore 不同的是,许可的累加上限是1。


2. API解释

  • static void park() :禁止当前线程进行线程调度(就是阻塞),除非许可证可用。

    permit默认是零,所以一开始调用park()方法,当前线程就会阻塞,直到别的线程将当前线程的permit设置为1时,park方法会被唤醒,然后会将permit再次设置为零并返回。

    public static void park() {UNSAFE.park(false, 0L);
    }
    
  • static void unpark(Thread thread):为指定的线程提供许可证(前提是尚未提供过许可证)。

    调用unpark(thread)方法后,就会将thread线程的许可permit设置成1(注意多次调用unpark方法,不会累加,permit值还是1)会自动唤醒thread线程,即之前阻塞中的LockSupport.park()方法会立即返回。

    public static void unpark(Thread thread) {if (thread != null)UNSAFE.unpark(thread);
    }
    

3. 代码示例

3.1 先等待再唤醒

先等待再唤醒,这是一般情况。

public static void main(String[] args) {Thread t1 = new Thread(() -> {System.out.println(Thread.currentThread().getName() + "\t ----come in" + System.currentTimeMillis());LockSupport.park();System.out.println(Thread.currentThread().getName() + "\t ----被唤醒" + System.currentTimeMillis());}, "t1");t1.start();//暂停几秒钟线程try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }new Thread(() -> {LockSupport.unpark(t1);System.out.println(Thread.currentThread().getName() + "\t ----发出通知");}, "t2").start();}

运行结果如下:

image-20230406000943421


3.2 先唤醒再等待

先唤醒再等待,这是特殊情况。

public static void main(String[] args) {Thread t1 = new Thread(() -> {try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "\t ----come in" + System.currentTimeMillis());LockSupport.park();System.out.println(Thread.currentThread().getName() + "\t ----被唤醒" + System.currentTimeMillis());}, "t1");t1.start();new Thread(() -> {LockSupport.unpark(t1);System.out.println(Thread.currentThread().getName() + "\t ----发出通知");}, "t2").start();}

运行结果如下:

image-20230406001202624

注:park和unpark必须成对出现。


4. 区别

除了LockSupport类的park、unpark方法可以实现等待唤醒功能,Object类的wait、notify以及Condition接口的await、signal也同样能实现。

不过LockSupport是它们俩的升级版本。

Object类和Condition接口的方法在使用上都有一定的限制条件。


4.1 wait和notify的限制

  1. wait和notify方法必须要在同步代码块中,且成对出现使用。
  2. 必须要先wait才能notify,否则会一直阻塞。

4.2 await和signal的限制

  1. Condition中的await和signal方法必须先获取锁。
  2. 一定要先await后signal,否则会一直阻塞。

而LockSupport类的方法就没有以上限制。

http://www.jmfq.cn/news/5048659.html

相关文章:

  • 做外贸网站那个好/专业网络推广机构
  • 网站建设方案的含义/快速排名软件案例
  • 天津网站建设网站建设/北京seo经理
  • 南宁网站建设平台/如何进行新产品的推广
  • 网站被做暗链报告/域名注册查询
  • 谁有人和兽做的网站?/网站发稿平台
  • 做公司子网站的请示报告/企业网站制作
  • 建网站公司汽车六万公里是否累变速箱油/百度点击优化
  • 天津网站建站/专注于品牌营销服务
  • wordpress调用用户名/北京seo包年
  • 展示型网站首页设计解析/谷歌推广网站
  • 基层建设期刊网站/统计工具
  • 网站建设开发综合实训小结/工具大全
  • php网站开发业务/阿里巴巴国际站运营
  • 网站上动态图片怎么做/青岛百度网站排名优化
  • 如何创建网站服务器地址/it培训学校哪家好
  • 深圳视频网站开发/企业网站seo诊断报告
  • 网站建设企业战略/seo专员简历
  • 东莞企业网络推广/临沂seo推广
  • wordpress网站做成苹果app/武汉网络推广外包公司
  • 网站建设公司排名及费用/新闻头条国内大事
  • 网络服务商官方网站/百度极速版免费下载
  • 小型教育网站的开发建设论文/seo培训机构哪家好
  • 网站开发建设企业/今天的三个新闻
  • 网站哪个公司做的好/如何做好网络营销管理
  • 个人做网站的流程/网站推广四个阶段
  • 简单网上书店网站建设php/十大小说网站排名
  • php网站开发师条件/网站查询备案信息
  • 广东深圳光明区疫情最新情况/软件排名优化
  • baot网站建设/治疗腰椎间盘突出的特效药