首页 > 编程语言 >图解Java并发编程第一章总结【精炼版】

图解Java并发编程第一章总结【精炼版】

时间:2024-03-13 23:33:12浏览次数:21  
标签:Java 编程 park 死锁 unpark 线程 操作 图解 sleep

【第一章】 图解Java并发编程

Java线程的基本操作

  • yield操作:yield操作,在基于时间片轮转的cpu调度算法中,用来放弃当前时间片

  • sleep操作:sleep操作分为三种情况

      1. 普通sleep:在指定时间内放弃cpu使用权,不释放同步锁

      2. sleep(0): 作用与yield相同

      3. sleep被中断:抛出中断异常

  • 中断操作:JDK为Thread类预留了三个中断标识符,分别为:

    • public void interrupt():

      • 如果当前线程在wait sleep join中,则会抛出异常并清空中断状态

      • 如果当前线程正常运行与IO无关,则对中断标志设置为true。需要自己捕捉

    • public Boolean isInterrupted()

    • public static Boolean interrupted():返回中断状态,并清空中断状态

    • park操作:线程在调用park阻塞被中断后,不会抛出异常

park/wait/suspend对比 设计思路

Java线程间通信(决定线程执行顺序)提供了三种方式,分别为park unpark/wait notify /suspend resume

区别如下:

  • suspend/resume: 该方法是线程对象的方法,直接操作线程。如果线程阻塞时还未来及释放某个对象的锁,那么则会导致需要该锁的对象一直阻塞下去

  • wait/notify: 方法需要一个对象来作为锁标志,这样只要编程时保证操作完其他对象的锁再释放锁对象的锁,即可一定程度上避免死锁问题。但是假如先执行了notify方法,那么wait方法将永远阻塞,导致死锁

  • park/unpark:方法基于许可机制。即unpark将许可一次park操作。即便是先执行了unpark,park操作也会得到许可而不被阻塞。注意,unpark的许可是一次性的,不论park前调用多少次unpark,只会许可一次park操作。

思路总结:

suspend/resume 最原始,直接操作线程,存在死锁问题,因此引入wait/notify来解决死锁问题。但是后者执行顺序不确定仍然可能导致死锁,因此使用park/unpark的认证机制来避免死锁。

Join操作

Join操作主要用来等待其他线程完成任务,并由JVM在线程结束时自动调用notifyAll方法唤醒调用Join的线程。

thread2.start();// 执行一些操作
thread3.start();// 执行一些操作
thread1.start();
thread1.join();
System.out.println("Thread all ended")

如代码所示,此时thread1将对thread2、thread3进行等待,阻塞直到两个线程结束为止。

Join操作实现原理

Join操作最终将调用join(long timeMills)。这个方法有三个策略

  • if time < 0 抛出参数不合法异常

  • if time == 0 则永久等待,直到被终止的线程自动通知

  • if time > 0 那么将进入等待状态,给定时间后结束等待。

标签:Java,编程,park,死锁,unpark,线程,操作,图解,sleep
From: https://blog.csdn.net/FamousAT/article/details/136694131

相关文章

  • 基于SSM的协同过滤算法的电影推荐系统(有报告)。Javaee项目。ssm项目。
    演示视频:基于SSM的协同过滤算法的电影推荐系统(有报告)。Javaee项目。ssm项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Vue+Layui+Elementui+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。报......
  • Java知识点之单例模式
    1、单例模式(BinarySearch)单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但......
  • java毕业设计小众咖啡店推荐平台的设计与实现(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景在当今社会,咖啡已经成为许多人日常生活中不可或缺的一部分。随着人们生活水平的提高和消费观念的转变,越来越多的人开始追求个性化和高品质的咖啡体验。小......
  • java毕业设计线上教学平台(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景随着互联网技术的迅猛发展,线上教育已经成为了现代教学体系中不可或缺的一部分。尤其是在全球性的公共卫生事件影响下,线上教学平台显示出了其独特的优势和......
  • Java 简单 bean 与 json 互相转换
    场景说明最近在写一个服务,经常用到调别人接口得到json,然后需要转换为指定bean,记录一下常用工具类引入依赖<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency>......
  • 【华为OD】C卷真题 200分:分披萨 JavaScript代码实现[思路+代码]
       C++\python\java\C代码:【华为OD】C卷真题200分:分披萨C/C++代码实现[思路+代码]_第一行为正整数奇数n,表示最小披萨小块数量。3<=n<500-CSDN博客【华为OD】C卷真题200分:分披萨python代码实现[思路+代码]-CSDN博客【华为OD】C卷真题200分:分披萨Java代码实现[思路+......
  • 【Java面试题-基础知识01】Java数据类型四连问?
    一、Java中的基础数据类型有哪些?Java中的基本数据类型包括:1.byte:8位有符号整数,范围为-128到127。2.short:16位有符号整数,范围为-32768到32767。3.int:32位有符号整数,范围为-2147483648到2147483647。4.long:64位有符号整数,范围为-9223372036854775808到9223372036854775807。5.......
  • Java毕业设计 基于SSM jsp房屋租赁系统 房屋出租系统
    Java毕业设计基于SSMjsp房屋租赁系统房屋出租系统SSMjsp房屋租赁系统房屋出租系统功能介绍用户:首页图片轮播搜索登录注册新闻公告新闻公告详情装修广告热门房源房源详情合租整租商业办公普通民宅酒店式公寓全部房源留言交流发布帖子模糊查询用户......
  • JavaScript 中 cookie、localStorage 和 sessionStorage 三者的区别(转载)
    1、三者区别cookie用来保存登录信息,大小限制为4KB左右localStorage是Html5新增的,用于本地数据存储,保存的数据没有过期时间,一般浏览器大小限制在5MBsessionStorage接口方法和localStorage类似,但保存的数据的只会在当前会话中保存下来,页面关闭后会被清空。名称......
  • 21_Java循环模式
    循环结构while循环do…while循环for循环在Java5中引入了一种主要用于数组的增强型for循环。while循环while是最基本的循环结构:While(布尔表达式){//循环内容}要求:只要布尔表达式为true,循环就会一直执行下去多数情况会让循环停止下来,需要一个让表达式失......