JUC并发编程初学

news2024/12/23 15:57:59
  1. 什么是JUC
  2. 进程和线程回顾
  3. Lock锁
  4. 生产者和消费者
  5. 8锁的线程
  6. 集合类不安全
  7. Callable
  8. CountDownLatch、CyclicBarrier、Semaphore
  9. 读写锁
  10. 阻塞队列
  11. 线程池
  12. 四大函数式接口
  13. Stream流式计算
  14. 分支合并
  15. 异步回调
  16. JMM
  17. volatile
  18. 深入单例模式
  19. 深入理解CAS
  20. 原子引用
  21. 可重入锁、公平锁非公平锁、自旋锁、死锁... 

一. 什么是JUC 

java.util.concurrent 包是在并发编程中使用的工具类,有以下三个包:

  • java.util.concurrent
  • java.util.concurrent.atomic
  • java.util.concurrent.locks

二. 进程和线程回顾

  • 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
  • 线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程可以利用进程所有拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。
白话:
  • 进程:就是操作系统中运行的一个程序,QQ.exe, music.exe word.exe ,这就是多个进程
  • 线程:每个进程中都存在一个或者多个线程,比如用word写文章时,就会有一个线程默默帮你定时自动保存。

Java默认有几个线程? 

  • 2个:main线程、GC线程(垃圾回收线程)

线程对于Java而言:Thread、Runnable、Callable 

Java真的可以开启线程吗? 

  • 开不了,start()方法底层调用的start0()是native本地方法,底层的C++ 
package com.gch.juc;

public class StartDemo1 {
    public static void main(String[] args) {
        new Thread().start(); // 实际上调用的是start0方法
    }
}

并发、并行

  • 并发编程:并发、并行
  • 并发(多线程操作同一个资源)  CPU一核,模拟出来多条线程,快速交替执行。
  • 一个CPU一次只能执行一条指令
  • 并行(多线程操作多个资源)  CPU多核,多个线程可以同时执行;线程池
package com.gch.juc;

public class cpuCores {
    public static void main(String[] args) {
        // 获取CPU的核数
        // CPU密集型、IO密集型
        System.out.println(Runtime.getRuntime().availableProcessors()); // 12
    }
}
  • 并发编程的本质:充分利用CPU的资源,充分的利用处理器的每一个核,以达到最高的处理性能。

线程有几个状态?

wait/sleep区别:

  1. 来自不同的类:wait===>Object      sleep===>Thread

企业当中,让线程休眠会用Thread.sleep吗?

  • 不会,会用TimeUnit这个工具类来操作:

2. 关于锁的释放:有没有释放锁(释放资源) 

  • wait会释放锁
  • sleep睡觉了,抱着锁睡觉,不会释放锁
  • 最主要是sleep方法没有释放锁,而wait方法释放了锁使得其他线程可以使用同步控制块或者方法。
  • sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpuos认为该线程正在工作,不会让出系统资源
  • wait是进入等待池等待,让出系统资源,其他线程可以占用cpu
  • sleep(100L)是占用cpu,线程休眠100毫秒,其他进程不能再占用cpu资源
  • wait100L)是进入等待池中等待,交出cpu等系统资源供其他进程使用,在这100毫秒中,该线程可以被其他线程notify,但不同的是其他在等待池中的线程不被notify不会出来,但这个线程在等待100毫秒后会自动进入就绪队列等待系统分配资源换句话说,sleep(100)在100毫秒后肯定会运行,但wait在100毫秒后还有等待os调用分配资源,所以wait100的停止运行时间是不确定的,但至少是100毫秒。
  • 就是说sleep有时间限制的就像闹钟一样到时候就叫了,而wait()是无限期的除非用户主动notify

 3、使用范围不同

  • wait,notify和notifyAll只能在同步控制方法或同步控制块里面使用

  • sleep可以在任何地方使用。 
synchronized(x){
  //或者wait()
  x.notify()
}

4. 是否需要捕获异常 

  • sleep必须捕获异常 --- throws InterruptedException
  • wait,notify和notifyAll不需要捕获异常 

三. Lock锁(重点)

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/654244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云服务器的扩展性如何?是否支持弹性扩容和自动负载均衡?

阿里云服务器的扩展性如何?是否支持弹性扩容和自动负载均衡?   阿里云服务器的扩展性特点   阿里云服务器(ECS)在扩展性方面具有优势,能够满足用户不断变化的业务需求。以下我们将详细介绍阿里云服务器的扩展性特点…

离散数学题目收集整理练习(期末过关进度50%)

✨博主:命运之光 🦄专栏:离散数学考前复习(知识点题) 🍓专栏:概率论期末速成(一套卷) 🐳专栏:数字电路考前复习 ✨博主的其他文章:点击…

Spring Security--连接数据库

书接上一篇&#xff0c;在实际的开发中&#xff0c;我们的账号密码不可能是这样写在配置文件中的&#xff0c;应该是要来自于数据库。 接着上一篇的项目&#xff0c;我们继续&#xff0c;在原有的依赖的基础上新增&#xff0c;mysql驱动依赖和mybatis依赖 <dependencies>…

拼多多和华为5年,分享一下我的划水经验....

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入华为&#xff0c;之后跳槽到了滴滴&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次晋升&#xff0c;换了一家公司&#xff0c;有…

650V IGBT 模块(FAM65V05DF1)NTMFD5C470NLT1G和NTMTS0D7N04CTXG(40V)表面贴装 MOSFET

FAM65V05DF1智能电源模块&#xff08;IPM&#xff09;是高度集成的固态电源开关&#xff0c;在单个模块中集成了基于IGBT或MOSFET的栅极驱动电路。IPM还包括电源系统免受短路、欠压和极端温度等问题的保护。 该IPM具有高集成度、小封装和出色的冷却性能&#xff0c;有助于设计…

基于Java在线云音乐系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

大学英语六级考试2022年9月真题|第一 二 三 套|9:20

【作文1】It is now widely accepted that mutual trust and openness is the key to promoting cooperation. 【作文2】Today more and more people begin to realize the pleasures and joys of real-world social interaction. 【作文3】Nowadays students are becoming …

红外测距传感芯片WH4530A

红外线又称红外光&#xff0c;它具有反射、折射、散射、干涉、吸收等性质。任何物质&#xff0c;只要它本身具有一定的温度&#xff08;高于绝对零度&#xff09;&#xff0c;都能辐射红外线。红外线传感器测量时不与被测物体直接接触&#xff0c;因而不存在摩擦&#xff0c;并…

踏上极速向未来之旅!——2023年量化科技嘉年华·专场回顾

2023年6月2日—3日&#xff0c;“2023量化科技嘉年华”在上海世博中心召开&#xff0c;这场为期两天的量化科技盛会&#xff0c;多方位呈现了量化科技创新成果&#xff0c;吸引了众多关注。 在嘉年华的第二天&#xff0c;多场主题论坛同步进行。 由华锐技术主办的“极速向未来…

编程(42)----------锁策略

简单总结一下自身对于锁策略的理解. 首先锁策略并非只针对某一种编程语言, 不同的编辑语言都可以使用同一套锁策略. 常见的锁策略有: 乐观锁和悲观锁 乐观锁, 即认为锁的竞争并非非常激烈. 悲观锁反之. 换句话说, 假设期末来临. 乐观态度的学生认为复习的很好, 问题不大. 而…

Navicat 连接 MySQL :2002 - Can‘t connect to server on ‘127.0.0.1‘ (36)

问题&#xff1a; 2002 - Can‘t connect to server on ‘127.0.0.1‘ (36) 场景 Navicat 16MySQL 5.7Windows虚拟机Mac主机 导言&#xff1a; Navicat 是一款功能强大的数据库管理工具&#xff0c;但在使用过程中可能会遇到连接 MySQL 数据库时出现 “Can’t connect to se…

微服务开发系列 第十篇:Gateway

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…

2023年餐饮连锁行业研究报告

第一章 行业概况 餐饮连锁行业是全球经济的重要组成部分&#xff0c;它的主要运营模式是通过连锁经营形式提供食品和饮料服务。 连锁经营主要分为三种运营模式&#xff1a;直营连锁、特许经营和自由连锁经营。三种模式通过专业分工、集中管理实现规模效益。 直营连锁&#x…

华为又开始放大招了?CV新架构:VanillaNet: the Power of Minimalism in Deep Learning 论文阅读笔记

华为又开始放大招了&#xff1f;CV新架构&#xff1a;VanillaNet: the Power of Minimalism in Deep Learning 论文阅读笔记 一、Abstract二、引言三、单个 Vanilla 的神经结构四、训练 VanillaNet4.1 深度训练策略4.2 Series Informed Activation Function 五、实验5.1 消融实…

SSD202D-logo显示调试

参考网址:cBOOT LOGO以及显示参数使用参考 - SigmaStarDocsSigmaStar Developer Documentationhttp://wx.comake.online/doc/doc/TAKOYAKI_ZH/customer/development/software/BOOTLOGO.html1.mipii点亮过程中需要加点复位 2.编译生成新屏参 3.修改屏参选择名字 4.

Cortex-M3 的 双堆栈MSP和PSP

什么是栈&#xff1f; 在谈M3堆栈之前我们先回忆一下数据结构中的栈。栈是一种先进后出的数据结构(类似于枪支的弹夹&#xff0c;先放入的子弹最后打出&#xff0c;后放入的子弹先打出)。M3内核的堆栈也不例外&#xff0c;也是先进后出的。栈的作用&#xff1f; …

性能测试基础知识(一)性能测试的分类

性能测试的分类 一、什么是性能测试&#xff1f;二、性能测试的目的三、性能测试的分类1、基准测试2、并发测试3、负载测试4、压力测试5、其他测试 一、什么是性能测试&#xff1f; 性能测试是在一定的负载1条件下&#xff0c;系统的响应时间等特性是否满足特定的性能需求。需…

Appium 并发多进程基于 Pytest框架详解

目录 前言&#xff1a; 改造思路&#xff1a; 实现&#xff1a; 最后&#xff1a; 总结&#xff1a; 前言&#xff1a; 之前通过重写unittest的初始化方法加入设备参数进行并发&#xff0c;实现了基于unittest的appium多设备并发&#xff0c;但是考虑到unittest的框架实在…

幼儿园门禁如何应用人脸识别技术?3大优势你知道几个

随着社会的发展和科技的进步&#xff0c;人脸识别技术逐渐渗透到各个领域&#xff0c;为我们的生活带来了许多便利和安全。在幼儿园这个特殊的场所&#xff0c;保证幼儿的安全和管理是至关重要的。 通过人脸识别技术&#xff0c;幼儿园可以准确、快速地辨识幼儿、家长和教职工的…

yolov8 目标检测与跟踪

参考&#xff1a; 参考&#xff1a; https://github.com/ultralytics/ultralytics https://github.com/TommyZihao/Train_Custom_Dataset/blob/main/%E7%9B%AE%E6%A0%87%E8%BF%BD%E8%B8%AA/%E5%85%AC%E5%BC%80%E8%AF%BE/ https://www.rstk.cn/news/42041.html?actiononClick …