JUC (java并发编程学习分享篇)

简介: JUC (java并发编程学习分享篇)

JUC

1.进程线程  同步异步 并发并行
线程创建的三种方式
linux查看进程中的线程命令
top -H -p PID(进程id)
java jps命令
jstack  PID (详细快照)
远程使用jconsole连接服务
java -Djava.rmi.server.hostname=172.19.71.34
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=端口号
-Dcom.sun.management.jmxremote.ssl=fasle(是否安全链接)
-Dcom.sun.management.jmxremote.authenticate=false(是否认证)类名

栈与栈帧
Java 线程6种状态


并发临界区
synchronized使用对象锁保证了临界区代码的原子性

Synchornized 在普通方法上锁的this对象
Synchornized 在静态方法上锁的class对象

private 和final 保证线程安全 开闭原则

多个线程调用同一个实例是线程安全的,每一个方法的操作是线程安全的,但是方法的组合不是线程安全的
超买超卖问题,转账问题 对synchronized(this/Class.class)
2.monitor



偏向锁  JDK6
第一次CAS获取到锁monitor时,将线程threadID 记录到markword头, 之后比较线程ID来进行是否需要CAS。
JOL 查看对象的偏向锁标记 MarkWord 头 001


启动开启偏向锁命令参数
-XX:BiasedLockingStartupDelay=0


禁用偏向锁
-XX:-UseBiasedLocking


存在锁竞争 时锁膨胀升级



启用偏向锁
-XX:+UseBiasedLocking
调用hashcode 会使对象从偏向为普通状态
为什么轻量级和重量级调hashcode()不会变为普通状态?
因为轻量级锁 hashcode存放在栈帧lockRecord中 重量级锁的hashcode在monitor中


wait notify


批量锁偏向  jvm 阈值20次  撤销偏向超过20次 不会升级到轻量级锁 而是取消偏向之前的线程,重新偏向与另一个线程。
jvm 阈值40次  撤销偏向超过40次之后,对象不偏向于任何线程。
锁消除
jvm 默认开启   JIT对没有竞争的代码进行消除 synchronized
轻量级锁  
栈帧LockRecord 对象
CAS成功 替换markword 00
锁重入  CAS LockRecord 计数+1 尝试替换Markword 每次都会CAS
CAS 失败原因 线程竞争激烈 ,流程 thread-01把Object的monitor升级为重量级锁 并进入monitor的阻塞list中
CAS失败 锁膨胀 通过monitor找到地址并把owner置位null 唤醒阻塞list


重量级锁
自旋优化    JDK7以后由JVM控制

Sleep 、Wait
Thread 和Object
Sleep不会
锁  Wait会释放锁 进入WaitSet
wait+synchronized
thread state  time_wait
JDK Thread Join( )  保护性暂停模式


死锁




volatile 保证可见性和有序性 保证不了原子性

目录
相关文章
|
3天前
|
设计模式 安全 Java
Java编程中的单例模式:理解与实践
【10月更文挑战第31天】在Java的世界里,单例模式是一种优雅的解决方案,它确保一个类只有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的实现方式、使用场景及其优缺点,同时提供代码示例以加深理解。无论你是Java新手还是有经验的开发者,掌握单例模式都将是你技能库中的宝贵财富。
10 2
|
6天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
34 5
|
4天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
2天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
5天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
23 4
|
5天前
|
消息中间件 供应链 Java
掌握Java多线程编程的艺术
【10月更文挑战第29天】 在当今软件开发领域,多线程编程已成为提升应用性能和响应速度的关键手段之一。本文旨在深入探讨Java多线程编程的核心技术、常见问题以及最佳实践,通过实际案例分析,帮助读者理解并掌握如何在Java应用中高效地使用多线程。不同于常规的技术总结,本文将结合作者多年的实践经验,以故事化的方式讲述多线程编程的魅力与挑战,旨在为读者提供一种全新的学习视角。
25 3
|
3天前
|
设计模式 安全 Java
Java编程中的单例模式深入解析
【10月更文挑战第31天】在编程世界中,设计模式就像是建筑中的蓝图,它们定义了解决常见问题的最佳实践。本文将通过浅显易懂的语言带你深入了解Java中广泛应用的单例模式,并展示如何实现它。
|
5天前
|
存储 缓存 安全
Java内存模型(JMM):深入理解并发编程的基石####
【10月更文挑战第29天】 本文作为一篇技术性文章,旨在深入探讨Java内存模型(JMM)的核心概念、工作原理及其在并发编程中的应用。我们将从JMM的基本定义出发,逐步剖析其如何通过happens-before原则、volatile关键字、synchronized关键字等机制,解决多线程环境下的数据可见性、原子性和有序性问题。不同于常规摘要的简述方式,本摘要将直接概述文章的核心内容,为读者提供一个清晰的学习路径。 ####
18 2
|
6月前
|
存储 安全 Java
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
85 1
|
6月前
|
存储 Java
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法