
并发
z974656361
这个作者很懒,什么都没留下…
展开
-
Java线程的生命周期
线程生命周期原创 2022-07-09 12:22:22 · 477 阅读 · 0 评论 -
Java创建线程的方式
Java线程创建原创 2022-07-05 12:29:32 · 172 阅读 · 0 评论 -
CyclicBarrier源码解析
CyclicBarrier源码解析CyclicBarrier,它也是一个同步助手工具,它允许多个线程在执行完相应的操作之后彼此等待共同到达一个屏障点。CyclicBarrier在涉及固定大小的线程数目的程序中非常有用,这些线程偶尔需要彼此相互等待。这个屏障之所以称为是循环的,是因为在所有等待线程释放了以后,它还可以重复使用。CyclicBarrier还支持一个可选的命令Runnable,该命令会在每个屏障点处执行一次,执行时间是在最后一个线程到达之后,但是任何线程释放之前。CyclicBarrier的这原创 2021-01-10 21:07:08 · 120 阅读 · 0 评论 -
CountDownLatch源码解析
CountDownLatch源码解析countDownLatch是一个用来实现同步的工具,允许一个或者多个线程等待其他的线程完成一系列的操作。类定义public class CountDownLatch{}属性定义private final Sync sync;Sync是一个内部类,一个同步器。内部类Sync的定义private static final class Sync extends AbstractQueuedSynchronizer{ private static f原创 2021-01-08 22:56:55 · 136 阅读 · 0 评论 -
AtomicReferenceFieldUpdater源码解析
AtomicReferenceFieldUpdater源码解析AtomicReferenceFieldUpdater原子性地更新对象的引用类型属性。外部抽象类外部抽象类的类定义public abstract class AtomicReferenceFieldUpdater<T, V>{}外部抽象类的构造方法protected AtomicReferenceFieldUpdater(){}外部抽象类的工厂方法@CallerSensitivepublic static <原创 2020-12-22 23:23:27 · 211 阅读 · 0 评论 -
AtomicLongFieldUpdater源码解析
AtomicLongFieldUpdater源码解析这是一个基于反射的工具类,可以对指定的类的指定long类型的被volatile关键字修饰的字段进行原子性的更新。这个类设计用于在原子数据结构中,对同一个节点的几个字段独立的进行原子性更新。外部抽象类外部抽象类的定义public abstract class AtomicLongFieldUpdater<T> {}首先,这个是一个抽象类,并且是一个泛型类,类型T就代表包含需要更新字段的类型。外部抽象类的创建更新器的方法@Calle原创 2020-12-20 21:22:02 · 214 阅读 · 0 评论 -
AtomicIntegerFieldUpdater源码详解
AtomicIntegerFieldUpdater源码详解一般情况下,要想使得共享数据的操作具备原子性,目前有两种方案。第一,使用关键字synchronized进行加锁;第二,将对应的共享数据定义成原子类型,比如将Int定义成AtomicInteger,其他数据类型则没有与之对应的原子类型,我们可以借助于AtomicReference进行封装。第一种方法,提供了互斥的机制来保证在同一时刻只能有一个线程对共享数据进行操作,因而这是一种悲观的同步方式。第二种方法,利用CAS算法提供的Lock Free原创 2020-12-17 20:43:17 · 298 阅读 · 0 评论 -
AtomicReferenceArray源码详解
AtomicReferenceArray源码解析AtomicReferenceArray主要提供了原子性操作对象引用数组元素的操作。类定义public class AtomicRefercenArray<E> implements java.io.Serializable{}属性定义private static final long serialVersionUID = -6209656149925076980L;private static final Unsafe unsafe原创 2020-12-09 20:42:18 · 195 阅读 · 0 评论 -
AtomicLongArray源码详解
AtomicLongArray源码详解AtomicLongArray提了原子性操作Long数据类型数组元组的操作。AtomicLongArray与AtomicIntegerArray源码类似,唯一的区别就是数组元素的类型不同。这里,不再做详细的赘述,简单记录下阅读过程。类定义public class AtomicLongArray implements java.io.Serializable{}属性定义private static final long serialVersionUID =原创 2020-12-06 10:50:00 · 136 阅读 · 0 评论 -
AtomicIntegerArray源码详解
AtomicIntegerArray源码详解AtomicIntegerArray主要提供原子性操作int数据类型数组元素的操作。类定义public class AtomicIntegerArray implements java.io.Serializable{}属性定义private static final long serialVersionUID = 2862133569453604235L;private static final Unsafe unsafe = Unsafe.get原创 2020-12-05 22:55:07 · 183 阅读 · 0 评论 -
AtomicStampedReference源码详解
AtomicStampedReference源码详解通过前面几个原子类源码的学习,可以发现这些原子类型实现原子类型的操作,主要是利用volatile和CAS来实现的。其中,volatile关键字可以保证线程可见性,而CAS算法,主要是通过unsafe,利用CPU的指令来实现操作的原子性,CAS算法实现了一种快速失败的方式,当某个线程修改已经被改变的数据时,会快速失败。另外,当CAS算法修改某个数据失败时,由于有自旋算法的加持,对于数据的修改最终会成功。在大多数情况下,通过CAS算法来实现操作的原子性,是没原创 2020-12-03 22:56:41 · 286 阅读 · 0 评论 -
AtomicReference源码详解
AtomicReference源码详解AtomicReference类提供了对象引用的非阻塞原子性读写操作。类定义public class AtomicReference<V> implements java.io.Serializable{}通过类定义,我们可以知道,AtomicReference是一个原子类型.属性private static final long serialVersionUID = -1848883965231344442L;private static原创 2020-11-27 21:31:18 · 650 阅读 · 0 评论 -
AtomicLong源码详解
AtomicLong源码详解AtomicLong提供了一种原子性操作long类型数据的解决方案。类定义public class AtomicLong extends Number implements java.io.Serializable{}AtomicLong同样也是继承自Number类,实现了序列化的接口.属性定义private static final long serialVersionUID = 1927816293512124184L;private static final原创 2020-11-27 20:46:36 · 157 阅读 · 0 评论 -
AtomicInteger源码详解
AtomicInteger类主要是为整型数据提供原子操作。类定义public class AtomicInteger extends Number implements java.io.Serializable {}首先,AtomicInteger和Integer一样都继承了Number类,其次,实现了序列化的接口。属性private static final Unsafe unsafe = Unsafe.getUnsafe();private static final long valueO原创 2020-11-23 20:24:36 · 311 阅读 · 0 评论 -
AtomicBoolean源码详解
AtomicBoolean详解AtomicBoolean提供了一种原子性地读写布尔类型变量的解决方案,通常情况下,该类将被用于原子性地更新状态标识位,比如flag。类定义public class AtomicBoolean implements java.io.Serializable{}AtomicBoolean的类定义很简单,实现了一个序列化的接口。属性定义private static final long serialVersionUID = 4654671469794556979L;原创 2020-11-25 21:02:43 · 248 阅读 · 0 评论