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 保证可见性和有序性 保证不了原子性

目录
相关文章
|
2月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
315 0
|
2月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
314 7
|
2月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
233 1
|
2月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
176 6
|
2月前
|
安全 前端开发 Java
从反射到方法句柄:深入探索Java动态编程的终极解决方案
从反射到方法句柄,Java 动态编程不断演进。方法句柄以强类型、低开销、易优化的特性,解决反射性能差、类型弱、安全性低等问题,结合 `invokedynamic` 成为支撑 Lambda 与动态语言的终极方案。
168 0
|
2月前
|
缓存 安全 Java
JUC系列《深入浅出Java并发容器:CopyOnWriteArrayList全解析》
CopyOnWriteArrayList是Java中基于“写时复制”实现的线程安全List,读操作无锁、性能高,适合读多写少场景,如配置管理、事件监听器等,但频繁写入时因复制开销大需谨慎使用。
|
2月前
|
设计模式 算法 安全
JUC系列之《深入理解AQS:Java并发锁的基石与灵魂 》
本文深入解析Java并发核心组件AQS(AbstractQueuedSynchronizer),从其设计动机、核心思想到源码实现,系统阐述了AQS如何通过state状态、CLH队列和模板方法模式构建通用同步框架,并结合独占与共享模式分析典型应用,最后通过自定义锁的实战案例,帮助读者掌握其原理与最佳实践。
|
前端开发 Java C++
JUC系列之《CompletableFuture:Java异步编程的终极武器》
本文深入解析Java 8引入的CompletableFuture,对比传统Future的局限,详解其非阻塞回调、链式编排、多任务组合及异常处理等核心功能,结合实战示例展示异步编程的最佳实践,助你构建高效、响应式的Java应用。
|
3月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
84 5
|
3月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
165 1