![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
qq_43641886
这个作者很懒,什么都没留下…
展开
-
vol.8 concurrent包下的Lock以及AQS
同步队列节点的数据结构,即AQS的静态内部类Node,节点的等待状态等信息;同步队列是一个双向队列,AQS通过持有头尾指针管理同步队列;acquire根据当前获得同步状态成功与否做了两件事情:1. 成功,则方法结束返回,2. 失败,则先调用addWaiter()然后在调用acquireQueued()方法addWaiter1.当前同步队列的尾节点为null,调用方法enq()插入;2. 当前队列的尾节点不为null,则采用尾插入(compareAndSetTail()方法)的方式入.原创 2020-08-11 16:57:00 · 123 阅读 · 0 评论 -
守护线程daemon
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。...原创 2020-06-06 23:04:41 · 96 阅读 · 0 评论 -
final内存屏障在处理器的使用
final 语义在处理器中的实现现在我们以 x86 处理器为例,说明 final 语义在处理器中的具体实现。上面我们提到,写 final 域的重排序规则会要求译编器在 final 域的写之后,构造函数 return 之前,插入一个 StoreStore 障屏。读 final 域的重排序规则要求编译器在读 final 域的操作前面插入一个 LoadLoad 屏障。由于 x86 处理器不会对写 - 写操作做重排序,所以在 x86 处理器中,写 final 域需要的 StoreStore 障屏会被省略掉。同原创 2020-06-02 17:57:03 · 487 阅读 · 0 评论 -
度量性能的指标
度量性能的指标有很多,但是有两个指标是最核心的,它们就是延迟和吞吐量。延迟指的是发出请求到收到响应这个过程的时间;延迟越短,意味着程序执行得越快,性能也就越好。吞吐量指的是在单位时间内能处理请求的数量;吞吐量越大,意味着程序能处理的请求越多,性能也就越好。这两个指标内部有一定的联系(同等条件下,延迟越短,吞吐量越大),但是由于它们隶属不同的维度(一个是时间维度,一个是空间维度),并不能互相转换。...原创 2020-05-31 15:58:09 · 319 阅读 · 0 评论 -
java并发面试题vol.1
说一个最熟悉的垃圾回收算法吞吐量优先和响应时间优先的回收器有哪些怎么判断内存泄漏为什么压缩指针超过32G失效为什么压缩指针超过32G失效什么是内存泄漏?GC调优有经验吗?一般出现GC问题你怎么解决?讲一下CMS的流程Threadlocal有没有内存泄漏问题G1两个Region不是连续的,而且之间还有可达的引用,我现在要回收一个,另一个怎么处理?讲一下JVM堆内存管理(对象分配过程)听说过CMS的并发预处理和并发可中断预处理吗到底多大的对象会被直接扔到老年大通过设置-XX:Pretr.原创 2020-05-26 22:38:08 · 237 阅读 · 0 评论 -
vol18plus ThreadLocalMap
里面有一个entry数组实现了弱引用类,他的键就为弱引用 static class ThreadLocalMap { //里面有一个entry数组实现了弱引用类,他的键就为弱引用 static class Entry extends WeakReference<ThreadLocal<?>> { /** The value associated with this ThreadLocal. */ ..原创 2020-05-24 22:03:27 · 144 阅读 · 0 评论 -
vol18. ThreadLocal解析
set方法//set 方法设置在当前线程中 threadLocal 变量的值,该方法的源码为:public void set(T value) { //1. 获取当前线程实例对象 Thread t = Thread.currentThread(); //2. 通过当前线程实例获取到ThreadLocalMap对象 ThreadLocalMap map = getMap(t); if (map != null) //3. 如果Map不为null,则以当前threadLo.原创 2020-05-24 16:50:21 · 312 阅读 · 0 评论 -
vol.2 线程状态转换以及基本操作
如何新建一个线程?(1)通过继承Thread类,重写run方法;(2)通过实现runable接口,重写run方法,然后作为target对象加入Thread;(3)通过实现callable接口,重写call()方法,使用Future对象进行封装,然后将Future对象加入到Thread中继承Thread和runnable接口有什么区别继承 Thread 类:我们创建了三次 MyThread 对象,也就是创建了三个任务(工作四个小时这个任务)和三个线程(张三,李四和赵五三个人),每个线程去完成自己的.原创 2020-05-24 15:51:52 · 123 阅读 · 0 评论 -
vol.1 并发的一些常见概念
上下文切换时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得多个线程是同时执行的,时间片一般是几十毫秒。而每次切换时,需要保存当前的状态起来,以便能够进行恢复先前状态。如何避免上下文切换方法:无锁并发编程,CAS算法,使用最少的线程和使用协程具体:项目Value无锁并发编程synchronize偏向锁CAS算法利用Atomic下使用CAS算法来更新数据,使用了乐观锁,可以有效的减少一部分不必要的锁竞争带来的上下文切换; sy.原创 2020-05-24 15:18:25 · 130 阅读 · 0 评论 -
关于并发你必须知道的一些知识
使用线程有三种使用线程的方法:实现 Runnable 接口;实现 Callable 接口;继承 Thread 类。实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。实现接口 VS 继承 Thread实现接口会更好一些,因为:Jav...原创 2020-03-14 18:21:58 · 123 阅读 · 0 评论 -
Java内存模型
可见性、有序性和原子性是并发编程里三个重要的原则,Java的内存模型就是用来解决可见性和有序性,规范了jvm如何按需进行缓存禁用和编译优化的方法,使用sychronized volatile final等关键字以及六项happens-before原则,volatile关键字表示禁用缓存直接从内存中读取数据,在jdk1.5后得到优化,与happens-before原则结合起来happens-be...原创 2020-02-01 11:43:07 · 79 阅读 · 0 评论