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 · 65 阅读 · 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 · 81 阅读 · 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 · 46 阅读 · 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 · 70 阅读 · 0 评论 -
11 多把锁
多把锁多把不相干的锁多把不相干的锁一间大屋子有两个功能:睡觉、学习,互不相干。现在小南要学习,小女要睡觉,但如果只用一间屋子(一个对象锁)的话,那么并发度很低解决方法是准备多个房间(多个对象锁) class BigRoom { public void sleep() { synchronized (this) { log.debug("sleeping 2 小时"); Sleeper.sl原创 2021-09-25 22:20:44 · 40 阅读 · 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 · 44 阅读 · 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 · 59 阅读 · 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 · 69 阅读 · 0 评论 -
* 原理之 join
多任务版 GuardedObject图中 Futures 就好比居民楼一层的信箱(每个信箱有房间编号),左侧的 t0,t2,t4 就好比等待邮件的居民,右侧的 t1,t3,t5 就好比邮递员如果需要在多个类之间使用 GuardedObject 对象,作为参数传递不是很方便,因此设计一个用来解耦的中间类,这样不仅能够解耦【结果等待者】和【结果生产者】,还能够同时支持多个任务的管理新增 id 用来标识 Guarded Object class GuardedObject {原创 2021-09-22 20:41:48 · 68 阅读 · 0 评论 -
* JVM原理之 wait / notify正确姿态
原理 wait / notifyAPI介绍注意notify()与notifyAll()区别代码实例运行结果sleep(long n) 和 wait(long n) 的区别API介绍代码实例运行结果wait / notifyAPI介绍obj.wait() 让进入 object 监视器的线程到 waitSet 等待obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒注意原创 2021-09-16 21:14:14 · 177 阅读 · 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 · 57 阅读 · 0 评论