
java并发多线程
文章平均质量分 94
Megetood
这个作者很懒,什么都没留下…
展开
-
线程池源码解析
线程池源码解析线程池解决两个问题:通过减少任务间的调度开销 (主要是通过线程池中的线程被重复使用的方式),来提高大量任务时的执行性能;提供了一种方式来管理线程和消费,维护基本数据统计等工作,比如统计已完成的任务数;Executors 为常用的场景设定了可直接初始化线程池的方法Executors#newCachedThreadPool 无界的线程池,并且可以自动回收;Executors#newFixedThreadPool 固定大小线程池;Executors#newSingleTh原创 2021-03-26 23:07:38 · 249 阅读 · 0 评论 -
synchronized的缺陷
synchronized的缺陷:1、效率低:锁的释放情况少、试图获得锁时不能设定超时、不能中断一个正在试图获得锁的线程。2、不够灵活(读写锁更灵活):加锁和释放的时机单一,每个锁仅有单一的条件(某个对象),可能是不够的。3、无法知道是否成功获取到锁。...原创 2020-07-25 15:22:53 · 896 阅读 · 0 评论 -
加锁与释放锁的原理
1、加锁与释放锁的原理:现象、时机、JVM字节码1)现象2)获取和释放锁的时机:内置锁a.进入到同步代码块时获取,退出时释放;3)jvm字节码a.概况:b.如何反编译c.Monditorenter和Monditorexit指令进入:monditor计数器加一,标志线程,别的线程进不来,重入时累加释放:monditor计数器减一2、可重入原理:加锁次数1)JVM负责跟踪对象被加...原创 2020-07-25 15:27:45 · 820 阅读 · 0 评论 -
锁的性质
1.可重入1)同一线程的外城函数获得锁之后,内层函数可以直接再次获取该锁,不用释放后再去二次获取。(递归锁:synchronized类)2)好处:避免死锁,提升封装性3)粒度(锁的范围):线程而非调用a.同一个方法可重入b.可重入不要求是同一个方法c.可重入不要求是同一个类中的2.不可中断1)一旦这个锁被别的线程获得,只能等待或阻塞,指导别的线程释放这个锁。如果别人用不释放这个给锁...原创 2020-07-25 15:28:11 · 364 阅读 · 0 评论 -
synchronized两个用法
对象锁方法锁(synchronized修饰普通方法,默认对象为this当前实例对象)同步代码块锁(自己制定锁对象)类锁synchronized修饰的静态的方法或指定锁为Class对象对象锁:应用:同一对象多个线程访问类锁:java类可能有很多个对象,但是只有一个Class对象,也就是Class对象的锁类锁只能在同一时刻被一个对象拥有形式1:synchronized加在stati...原创 2020-07-25 15:22:08 · 232 阅读 · 1 评论 -
synchronized之不使用并发
i++执行三个步骤1)读取i2)i加13)写u内存当i=5,第一个线程+1后,因该为i=6,但是还未写入内存,线程2就读取了内存中的数据i=5,然后执行i++,结果还是i=6,再写入内存,导致了两次+1还是i=6;...原创 2020-07-25 15:21:34 · 134 阅读 · 0 评论