4.7 wait notify - 4.11 多把锁

news/2024/12/28 9:37:07/

目录

    • 4.7 wait notify
      • 1、为什么需要wait
      • 2、原理之wait/notify
      • 3、API的介绍
    • 4.8 wait notify 的正确姿势
    • 4.9 Park & Unpark
    • 4.10 重新理解线程状态转换
    • 4.11 多把锁

4.7 wait notify

1、为什么需要wait

当持有锁的线程因为某种条件不能满足不能执行时,由于其持有锁,会其他线程也处于阻塞的状态,从而导致cpu的利用率降低。此时使用wait会使当前线程释放锁,进入waitset进行等待,等到条件满足再和其他线程来争夺锁,获取cpu的使用权

2、原理之wait/notify

见博客: https://blog.csdn.net/hc1285653662/article/details/131052585

3、API的介绍

见博客: https://blog.csdn.net/hc1285653662/article/details/131052585

4.8 wait notify 的正确姿势

4.9 Park & Unpark

1、基本使用
2、特点
3、原理之park \ unpark

见博客: https://blog.csdn.net/hc1285653662/article/details/131052585

4.10 重新理解线程状态转换

在这里插入图片描述

4.11 多把锁

一间大屋子有两个功能:床和学习桌,互不相干。
现在小南要学习,小女要睡觉,但如果只用一间屋子(一个对象锁)的话,那么并发度很低
解决方法是准备多个锁,床和学习桌都可以作为锁

public class TestMultiLock {public static void main(String[] args) {BigRoom bigRoom = new BigRoom();new Thread(() -> {bigRoom.study();},"小南").start();new Thread(() -> {bigRoom.sleep();},"小女").start();}
}@Slf4j(topic = "c.BigRoom")
class BigRoom {private final Object studyRoom = new Object();private final Object bedRoom = new Object();public void sleep() {synchronized (bedRoom) {log.debug("sleeping 2 小时");Sleeper.sleep(2);}}public void study() {synchronized (studyRoom) {log.debug("study 1 小时");Sleeper.sleep(1);}}
}

在这里插入图片描述

将锁的粒度细分

  • 好处,是可以增强并发度
  • 坏处,如果一个线程需要同时获得多把锁,就容易发生死锁

http://www.ppmy.cn/news/314714.html

相关文章

用maven安装JUnit 5并运行单元测试

一&#xff1a;首先讲如何安装 JUnit 5 JUnit Platform JUnit Jupiter JUnit Vintage 如果不需要执行基于JUnit 3 和JUnit 4 的用例&#xff0c;那么JUnit Vintage就不需要安装。 1&#xff09;在pom文件dependencies的小节内增加如下依赖&#xff1a; <dependency>&l…

【Java基础篇】方法的使用(方法的使用以及形参实参的关系)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a;Java.SE&#xff0c;本专栏主要讲解运算符&#xff0c;程序逻辑控制&#xff0c;方法的使用&…

电脑键盘 android手机,写信息更轻松 Android手机用电脑键盘

借助蓝牙将两个设备连接在一起的事例我们见过很多&#xff0c;在过去&#xff0c;智能手机和键盘通过蓝牙连接并不是一件容易的事情&#xff0c;现在&#xff0c;这一切都变得易如反掌。近日&#xff0c;出现了一款名为Share Keyboard的软件&#xff0c;适用于Android系统的智能…

手机重装为linux,安卓手机重装系统的方法

方法/步骤 1、要想重装系统&#xff0c;那首先要有你获得你的手机的最高权限&#xff0c;也即是你必须获得root权限&#xff0c;你才行进行下一步&#xff0c;目前比较好用的软件有&#xff1a;刷机精灵、百度一键root、360root等。这里介绍的是刷机精灵&#xff0c;自己先连接…

科学计算机怎么刷机,华为p1怎么刷机【图文教程】

我们处于这样的一个信息时代里面&#xff0c;每天都能够接收到各式各样的信息&#xff0c;有些人通过电脑&#xff0c;有些人通过电视&#xff0c;有的人使用手机获取信息&#xff0c;随着现 科学技术的不断发展&#xff0c;只能手机现在已经成了一种流行&#xff0c;但是我们在…

android6刷机教程,安卓手机刷机步骤

《安卓手机刷机步骤》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《安卓手机刷机步骤(2页珍藏版)》请在人人文库网上搜索。 1、看到各个机友说2.4、2.5、2.0.3 ROM的TW4经常FC,我自己刷的手机从未发现FC,在这里我想要强下的是各位机友可以看看我的刷机过程&#xff…

【玩转Jetson TX2 NX】(二)TX2 NX刷机+烧录系统和SDK(详细教程+错误解决)

1 Jetson TX2 NX硬件准备 Jetson TX2 NX 刷机需要Ubuntu系统电脑&#xff0c;本文直接在安装虚拟机的笔记本电脑进行: 【玩转Jetson TX2 NX】&#xff08;一&#xff09;win10安装VMware14 Workstation Pro创建Ubuntu18.04虚拟环境&#xff08;详细教程错误解决&#xff09; …

02-NVIDIA Jetson TX2 通过JetPack 3.1刷机完整版(踩坑版)

本文继第一篇文章&#xff1a;01-NVIDIA Jetson TX2开箱上电显示界面 TX2 出厂时&#xff0c;已经自带了 Ubuntu 16.04 系统&#xff0c;可以直接启动。但一般我们会选择刷机&#xff0c;目的是更新到最新的 JetPack L4T&#xff0c;并自动安装最新的驱动、CUDA Toolkit、cuDN…