JVM
文章平均质量分 55
深入了解JVM,黑马程序员,并发编程系列课程
http://yun.itheima.com/course/626.html?capid=1&hm
深蓝霍克
这个作者很懒,什么都没留下…
展开
-
线程池文章
线程池池化思想:作用线程池优点线程池的五种状态 池化思想: 线程池 字符串常量池 数据库连接池 作用 提高资源利用率 线程池 优点 提高线程利用率 提高程序的响应速度 便于统一管理线程对象 可以控制最大的并发数 线程池的五种状态 Running 能够接受新任务以及处理已添加到任务 Shutdown 不接受新任务,可以处理已添加的任务 Stop 不接受新任务 , 并且中断正在处理的任务 Tidiying 所有的任务已经终止,ctl记录的任务数量为0,ctl负责记录线程池的运行状态与活动线程数量原创 2021-10-15 11:49:36 · 60 阅读 · 0 评论 -
5.3有序性
5.3有序性简述 简述 JVM 会在不影响正确性的前提下,可以调整语句的执行顺序,思考下面一段代 static int i; static int j; // 在某个线程内执行如下赋值操作 i = ...; j = ...; 可以看到,至于是先执行 i 还是 先执行 j ,对最终的结果不会产生影响。所以,上面代码真正执行时,既可以是 i = ...; j = ...; 也可以是 j = ...; i = ...; 这种特性称之为『指令重排』,多线程下『指令重排』会影响正确性。为什么要有重排指令这项原创 2021-10-04 21:53:30 · 79 阅读 · 0 评论 -
13 ReentrantLock
13 ReentrantLock1.相对于 synchronized 它具备如下特点2.于 synchronized 相同点3. 基本语法4. 可重入5.可打断6.锁超时7.公平锁8.条件变量 1.相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量 2.于 synchronized 相同点 与 synchronized 一样,都支持可重入 3. 基本语法 // 获取锁 reentrantLock.lock(); try { //原创 2021-09-26 15:22:21 · 41 阅读 · 0 评论 -
12 锁的活跃性
锁的活跃性死锁定位死锁哲学家就餐问题活锁饥饿 死锁 有这样的情况:一个线程需要同时获取多把锁,这时就容易发生死锁 t1 线程 获得 A对象 锁,接下来想获取 B对象 的锁 t2 线程 获得 B对象 锁,接下来想获取 A对象 的锁 例: Object A = new Object(); Object B = new Object(); Thread t1 = new Thread(() -> { synchronized (A) { log原创 2021-09-25 22:34:23 · 63 阅读 · 0 评论 -
11 多把锁
多把锁多把不相干的锁 多把不相干的锁 一间大屋子有两个功能:睡觉、学习,互不相干。 现在小南要学习,小女要睡觉,但如果只用一间屋子(一个对象锁)的话,那么并发度很低 解决方法是准备多个房间(多个对象锁) class BigRoom { public void sleep() { synchronized (this) { log.debug("sleeping 2 小时"); Sleeper.sl原创 2021-09-25 22:20:44 · 35 阅读 · 0 评论 -
10 重新理解线程状态转换
10 重新理解线程状态转换情况 1 NEW --> RUNNABLE情况 2 RUNNABLE <--> WAITING情况 3 RUNNABLE <--> WAITING情况 4 RUNNABLE <--> WAITING情况 5 RUNNABLE <--> TIMED_WAITING情况 6 RUNNABLE <--> TIMED_WAITING情况 7 RUNNABLE <--> TIMED_WAITING情况 8 RUNN原创 2021-09-23 19:33:26 · 40 阅读 · 0 评论 -
9.Park & Unpark
Park & Unpark基本使用原理之Park & unPark 基本使用 它们是 LockSupport 类中的方法 // 暂停当前线程 LockSupport.park(); // 恢复某个线程的运行 LockSupport.unpark(暂停线程对象) 先 park 再 unpark Thread t1 = new Thread(() -> { log.debug("start..."); sleep(1); log.原创 2021-09-23 16:53:59 · 49 阅读 · 0 评论 -
生产者消费者
package cn.itcast.test; import lombok.extern.slf4j.Slf4j; import java.util.LinkedList; import static cn.itcast.n2.util.Sleeper.sleep; @Slf4j(topic = "c.Test21") public class Test21 { public static void main(String[] args) { MessageQueue qu原创 2021-09-22 20:48:51 · 66 阅读 · 0 评论 -
* 原理之 join
多任务版 GuardedObject 图中 Futures 就好比居民楼一层的信箱(每个信箱有房间编号),左侧的 t0,t2,t4 就好比等待邮件的居民,右 侧的 t1,t3,t5 就好比邮递员 如果需要在多个类之间使用 GuardedObject 对象,作为参数传递不是很方便,因此设计一个用来解耦的中间类, 这样不仅能够解耦【结果等待者】和【结果生产者】,还能够同时支持多个任务的管理 新增 id 用来标识 Guarded Object class GuardedObject {原创 2021-09-22 20:41:48 · 59 阅读 · 0 评论 -
* JVM原理之 wait / notify正确姿态
原理 wait / notifyAPI介绍注意notify()与notifyAll()区别代码实例运行结果sleep(long n) 和 wait(long n) 的区别API介绍代码实例运行结果 wait / notify API介绍 obj.wait() 让进入 object 监视器的线程到 waitSet 等待 obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒 obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒 注意原创 2021-09-16 21:14:14 · 167 阅读 · 0 评论 -
synchronized优化原理
6 偏向锁-批量撤销 简介 当偏向撤销阈值达到40此后,jvm会停止偏向,于是整个类的所有对象变为不可偏向。 package cn.itcast.n4; import lombok.extern.slf4j.Slf4j; import org.openjdk.jol.info.ClassLayout; import java.io.IOException; import java.util.Vector; import java.util.concurrent.locks.LockSupport; /原创 2021-09-16 20:49:27 · 50 阅读 · 0 评论