随笔分类 - 线程
摘要:ThreadLocal:每个线程可以保存自己的变量,多个线程互不影响,副本,线程独享 set:以当前线程为Key 保存在ThreadLocalMap public void set(T value) { //获取到当前执行这段代码的Thread对象 Thread t = Thread.current
阅读全文
摘要:线程创建: 1继承Thread类 public class ThreadC extends Thread { private MyService myService; ThreadC(MyService service) { myService = service; } @Override publ
阅读全文
摘要:什么是JMM JMM即为JAVA 内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在
阅读全文
摘要:Synchronized 无锁,偏向锁,轻量级锁 ,重量级锁 偏向锁:对象头存储线程ID,可重入(根据线程ID判断)指的就是,把markword的线程ID改为自己线程ID的过程 偏向锁不可重偏向 批量偏向 批量撤销 轻量级锁:复制对象头到Lock Record 记录锁信息,拥有锁 复制的Lock R
阅读全文
摘要:Condition 可以选择性的进行线程通知,在调度线程上更加灵活。 wait/notify方法进行通知时,被通知的线程是有JVM随机选择的,Condition的signalAll可以"选择性的通知" 公平锁与非公平锁 锁Lock分为“公平锁”和“非公平锁”;ReentrantLock默认为非公平锁
阅读全文
摘要:线程池重要参数 1.构造方法参数讲解 参数名 作用 corePoolSize 队列未满时,线程最大并发数;核心线程池大小如:80 maximumPoolSize 队列满后线程能够到达的最大并发数;最大线程池大小如:100 keepAliveTime 线程池中超过corePoolSize数目的空闲线程
阅读全文
摘要:JMM内存模型 volatile可见性底层是实现原理 底层实现主要是通过汇编lock前缀指令,它会锁定这块内存区域的缓存(缓存行锁定)并写回到主内存 lock指令: 1)将当前处理器缓存行的数据立即写回到系统内存。 2)这个写回内存的操作回引起其他CPU里面缓存了该内存地址的数据无效(MESI协议)
阅读全文
摘要:在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchroni
阅读全文
摘要:SynchronousQueue SynchronousQueue是无界的,是一种无缓冲的等待队列,但是由于该Queue本身的特性,在某次添加元素后必须等待其他线程取走后才能继续添加;可以认为SynchronousQueue是一个缓存值为1的阻塞队列,但是 isEmpty()方法永远返回是true,
阅读全文
摘要:前言 线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处: 1、降低资源消耗; 2、提高响应速度; 3、提高线程的可管理性。 Java1.5中引入的Executor框架把任务的提交和执行进行解耦,只需要定义好任务,
阅读全文
摘要:AQS介绍 AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。来看下同步组件对AQS的使用: AQS是一个抽象类,主是是以继承的方式使用。AQS本身是没有实现任何同步接口的,它仅仅只是定义了同步状态的获取和释放的方法来供
阅读全文
摘要:CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。 CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。 更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。 Synchronized属于悲
阅读全文

浙公网安备 33010602011771号