
JAVA并发编程
文章平均质量分 87
记录JAVA并发编程中的学习知识
Tattoo_Welkin
Just do it !!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 内存模型
文章目录Java 内存模型如何保证线程安全?原子性可见性(主要)有序性(主要)底层如何实现的?参考:Java 内存模型说到底虚拟机玩的再花,要什么有什么,最终还是要和底层 RAM 进行交互的嘛所以就需要一套规范来定义 JVM 到底与底层如何交互。Java 内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。只针对于共享变量各个线程有自己的工作内存,工作内存相互独立。线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主原创 2022-04-20 17:16:56 · 299 阅读 · 0 评论 -
常考算法实现题
文章目录实现 LRU实现 单例循环打印 AB使用 wait && notify使用 condition实现 LRUpublic class LRUCache { class DLinkedNode { int key; int value; DLinkedNode prev; DLinkedNode next; public DLinkedNode() { } p原创 2022-04-16 11:15:39 · 247 阅读 · 0 评论 -
Java并发编程实战之基础知识(Volatile 和 ThreadLocal 以及 CountDownLatch)
文章目录如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式可以修复这个问题:原子性复合操作对象的共享非原子的64位操作Volatile 变量典型用法(经常用作一种状态的标志识别)错误使用 volati1e 只保证可见性,不保证原子性发布与逸出如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式可以修复这个问题:不在线程之间共享该状态变量。将状态变量修改为不可变的变量。在访问状态变量时使用同步。无状态对象一定是原创 2022-03-02 00:55:09 · 563 阅读 · 0 评论 -
Java内存模型(JMM)
volatile字段的另一个特性是即时编译器无法将其分配到寄存器里。换句话说,volatile字段的每次访问均需要直接从内存中读写。文章目录对于volatile型变量的理解原子性、可见性与有序性首先我们大家都知道,OS会为我们做出很多优化,比如:高速Cache,编译优化,指令重排等。针对于高速Cache,我们现在的CPU架构是:每颗CPU都会有自己的高速Cache。如下图:对于JAVA而言,它的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细原创 2022-02-24 19:24:58 · 701 阅读 · 0 评论 -
Java中实现单例
文章目录原创 2022-02-24 19:24:27 · 368 阅读 · 0 评论 -
Java并发中的ReentrantLock,AQS框架和非阻塞同步机制
文章目录Lock 接口, ReentrantLock 和 synchronizedLock 接口轮询与定时锁轮询锁:定时锁:中断锁:lock.lockInterruptibly();公平性非公平锁性能更优的原因:ReentrantLock 和 synchronized的选择选择方式:读写锁:ReentrantReadWriteLock(读多写少场景)AQS 框架AQS 使用方法concurrent 包同步器类中的 AQS原子变量与非阻塞同步机制锁的优劣势硬件对并发的支持CAS 比较并交换CAS 与独占锁的比原创 2022-02-22 20:04:21 · 1187 阅读 · 0 评论 -
避免活跃性危险
文章目录死锁死锁原创 2022-02-20 11:23:28 · 585 阅读 · 0 评论 -
任务的执行与线程池
文章目录Executor 框架线程池Executor 的生命周期延迟任务与周期任务任务的取消与关闭中断示例:计时运行使用 Future 来实现取消shutdownNow 的局限性JVM 的关闭关闭钩子避免使用终结器线程池的使用线程饥饿死锁线程池的大小配置 ThreadPoolExecutor 
@[TOC](Java SSM 毕设过程记录笔记(02))未解决的问题记录:1。2、bootstrap-datetimepicker和bootstrapvalidator一起使用验证不起作用的问题。两个form表单的元素的id是不一样的,但是在这种情况下,需要保证,他们的 name 属性是一样的。2点击 更改学生信息的按钮,确不显示专业和班级的问题3 SpringMVC实现全局异常处理器3 SpringMVC实现全局异常处理器4 .人脸检测正常时返回的数据人脸检测正常时返回的数据原创 2021-08-30 17:32:52 · 257 阅读 · 0 评论 -
极客时间《Java并发编程实战》笔记---并发工具类章节杂记
文章目录19 | CountDownLatch和CyclicBarrier:如何让多线程步调一致?1.1.1.1.1.1.1.1.1.19 | CountDownLatch和CyclicBarrier:如何让多线程步调一致?CountDownLatch 主要用来解决一个线程等待多个线程的场景,可以类比旅游团团长要等待所有的游客到齐才能去下一个景点;而 CyclicBarrier 是一组线程之间互相等待,更像是几个驴友之间不离不弃。除此之外 CountDownLatch 的计数器是不能循环利用的,也就是说原创 2021-03-24 20:29:05 · 781 阅读 · 1 评论 -
《重构》笔记---坏代码的味道与处理
文章目录神秘命名(Mysterious Name)重复代码(Duplicated Code)过长函数(Long Function)如何提炼出一个函数:过长参数列表(Long Parameter List)全局数据(Global Data)可变数据(Mutable Data)重构手法速查表神秘命名(Mysterious Name)顾名思义,当然,这里就包含了 变量,函数,类,模块等等元素的名称!重复代码(Duplicated Code)如果你在一个以上的地点看到相同的代码结构,那么可以肯定:设法将它们原创 2021-02-01 17:41:24 · 1230 阅读 · 6 评论 -
极客时间《Java并发编程实战》笔记---ReadWriteLock与StampedLock
文章目录实现缓存的按需加载读写锁的升级与降级实现缓存的按需加载package com.codes;import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;class Cache<K, V> { fin原创 2021-01-26 19:17:08 · 585 阅读 · 0 评论 -
极客时间《Java并发编程实战》笔记--- Lock和Condition:隐藏在并发包中的管程
文章目录Lock 与 synchronized 的区别如何保证可见性Lock 与synchronized的区别Lock 与synchronized的区别Lock 与 synchronized 的区别synchronized 得不到资源就一直想要!而且还不释放已经占用的资源。而我们想要的结果是占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了,能够有效避免死锁。所以就有了Lock的出现。如果实现起来,主要有三种方案可选择:能够响应中断。syn原创 2021-01-24 14:19:31 · 358 阅读 · 2 评论 -
极客时间《Java并发编程实战》---并发编程BUG的源头与Java如何解决可见性和有序性问题笔记
文章目录并发编程bug的源头之一:缓存导致的可见性问题并发编程bug的源头之二:线程切换带来的原子性问题并发编程bug的源头之三:编译优化带来的有序性问题可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到原子性:把一个或者多个操作在 CPU 执行的过程中不被中断的特性有序性:指的是程序按照代码的先后顺序执行并发编程bug的源头之一:缓存导致的可见性问题单核时代,可见性问题是不用操心的,因为他就是同一块地方,同一块缓存。线程A对它进行修改,线程B立马就能够读取到。多核时代下,缓存的模型转载 2021-01-18 14:52:46 · 716 阅读 · 0 评论 -
Aviator和Groovy在表达式执行上的性能测试
对于整体表达式求值引擎的调研见:https://km.sankuai.com/page/417526699工具执行原理优点缺点性能建议Groovy通过ASM编译成字节码进行执行通过ASM编译成字节码进行执行编译字节码是通过ASM框架在指令层次上操作字节码的加上JIT执行,性能好学习成本较高,代码可读性较差Aviator通过ASM框架将表达式直接翻译成对应的 java 字节码执行,整个过程最多扫两趟(开启执行优先模式,如果是编译优先模式下就一趟)编译字节码是通过ASM框架在指令层次原创 2021-01-14 20:26:28 · 8567 阅读 · 4 评论 -
极客时间《Java并发编程实战》----Java线程
文章目录前言一、通用的线程生命周期二、Java中线程的生命周期三、Java线程的状态转换四、度量程序运行性能指标和多线程意义五、创建多少个线程合适六、为什么局部变量是线程安全的?七、如何用面向对象思想写好并发程序?封装共享变量识别共享变量间的约束条件制定并发访问策略主引用自:极客时间《Java并发编程实战》https://time.geekbang.org/column/intro/100023901前言一、通用的线程生命周期初始状态:,指的是线程已经被创建,但是还不允许分配 CPU 执行。转载 2021-01-10 23:27:52 · 2017 阅读 · 1 评论 -
Java SSM 毕设过程记录笔记(01)
这里写自定义目录标题mybatis连接mysql8.0mybatis连接mysql8.0MySQL8.0数据库配置变更:1,jdbc_driver=com.mysql.cj.jdbc.Driver,原先的com.mysql.cj.jdbc.Driver已不推荐使用;2,jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&...原创 2020-05-07 22:13:18 · 1610 阅读 · 0 评论 -
JAVA程序设计练习题集答案
3.直角三角形类 (10 分)创建一个直角三角形类(regular triangle)RTriangle类,实现下列接口IShape。两条直角边长作为RTriangle类的私有成员,类中包含参数为直角边的构造方法。interface IShape {// 接口// 抽象方法 求面积public abstract double getArea();// 抽象方法 求周长public ab...原创 2019-01-02 17:51:10 · 30297 阅读 · 0 评论