
JUC
文章平均质量分 94
JUC知识点
小幸运安然
这个作者很懒,什么都没留下…
展开
-
十二、Java中的各种锁
对于synchronized而言,也是一种非公平锁同一线程采用循环的方式去尝试获取锁对于ReentrantReadWriteLock其读锁是共享锁,写锁是独占锁保持写操作的可见性锁饥饿问题。原创 2022-09-20 00:35:10 · 402 阅读 · 0 评论 -
十一、AbstractQueuedSynchronizer源码分析
AbstractQueuedSynchronizer(抽象队列同步器),来自于JDK1.5,位于JUC包下,简称AQS;AQS作为一个抽象类,是构建JUC包中的锁或者其它同步组件的底层基础框架及JUC体系的基石。原创 2022-09-07 00:30:52 · 262 阅读 · 0 评论 -
十、ThreadLocal
JDK1.2提供,位于java.lang包,ThreadLocal可以提供线程内的局部变量,这种变量在线程的生命周期内起作用,ThreadLocal又叫做线程本地变量或线程本地存储。原创 2022-08-22 22:29:33 · 487 阅读 · 0 评论 -
九、CompletableFuture异步编排
在JDK1.5之后提供了一个多线程的新的处理接口Callable,该接口需要与Future接口整合在一起,而后再进行最终的异步操作,提升了多线程的处理性能。原创 2022-08-22 22:23:56 · 248 阅读 · 0 评论 -
八、线程池
在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其他更多资源。在Java中,虚拟机将视图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗费资源的对象的创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些“池化资源”技术产生的原因。原创 2022-08-22 22:12:03 · 1214 阅读 · 0 评论 -
七、阻塞队列与源码分析(下)
DelayQueue是一个支持延时获取元素的使用优先级队列实现的无界阻塞队列,队列中的元素必须实现Delayed接口和Comparable接口,也就是说DelayQueue里面的元素必须有compareTo()和getDelay()方法存在原创 2022-08-22 22:01:47 · 232 阅读 · 0 评论 -
五、同步计数器及源码
CountDownLatch是一个同步辅助类,直译就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思就是阻止执行。在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当前计数到达零之前,await()方法会一直受阻塞。之后会释放所有等待的线程,await()的所有后续调用都将立即返回。原创 2022-08-22 21:51:22 · 860 阅读 · 0 评论 -
四、LockSupport与线程中断
interrupt底层调用Unsafe中的native代码线程首先要获得并持有锁,必须在synchronized或lock中。原创 2022-08-22 21:45:50 · 408 阅读 · 0 评论 -
三、CAS原理与原子类
这个过程是原子的Unsafe类存在于sun.misc包中CAS是靠硬件实现的从而在硬件层面提升效率,最底层还是交给硬件来保证原子性和可见性减少乐观锁的重试次数/*** CPU核数,用来决定cells(槽数组)的最大长度,cells扩容时会使用到/*** 槽数组,大小为2的幂,2,4,8,16...等/*** 基数,在两种情况下会使用* 1、没有遇到并发竞争时,直接使用base累加数值,通过CAS更新。...原创 2022-08-22 21:39:09 · 231 阅读 · 0 评论 -
二、Java内存模型与volatile
虽然CPU的发展频率不断地得到提升,但受制于制造工艺以及成本的限制,计算机的内存反倒在访问速度上没有多大的提升,因此CPU的处理速度和内存的访问速度之间的差距越来越大JMM决定一个线程对共享变量的写入何时对另其他线程可见通过这个概念来阐述操作之间的内存可见性如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,并且第一个操作的执行顺序排在第二个操作之前不保证原子性volatile。原创 2022-08-22 21:24:19 · 233 阅读 · 0 评论 -
一、Synchronized详解与锁升级
对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)Mark Word被设计成一个有着动态定义的数据结构,以便在极小的空间内存储尽量多的数据,根据对象的状态复用自己的存储空间,也就是说在运行期间MarkWord里存储的数据会随着锁标志位的变化而变化无锁9、重量级锁/*** 验证当一个对象计算过hashcode时,它就无法进入到偏向锁状态,* 跳过偏向锁,直接升级为轻量级锁。...原创 2022-08-22 21:01:59 · 732 阅读 · 0 评论