
JUC
文章平均质量分 93
Java都不学
这个作者很懒,什么都没留下…
展开
-
JVM线程安全
当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为(单次调用)都可以获得正确的结果,那就称这个对象是线程安全的。原创 2022-11-09 22:26:08 · 694 阅读 · 0 评论 -
原子操作的实现原理
原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。原创 2022-09-23 17:14:54 · 269 阅读 · 0 评论 -
synchronized 锁优化
synchronized 实现同步的基础:Java 中的每一个对象都可以作为锁。具体表现为以下 3 种形式。⚫ 对于普通同步方法,锁是当前实例对象。⚫ 对于静态同步方法,锁是当前类的 Class 对象。⚫ 对于同步方法块,锁是 Synchonized 括号里配置的对象。JVM 基于进入和退出 Monitor 对象来实现方法同步和代码块同步,但两者的实现细节不一样。原创 2022-09-23 14:57:24 · 201 阅读 · 0 评论 -
volatile原理
volatile保证共享变量的可见性和有序性。比 synchronized 的使用和执行成本更低,因为它不会引起线程上下 文的切换和调度。对 volatile 的定义如下:Java 编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java 语言提供了 volatile,在某些情况下比锁要更加方便。如果一个字段被声明成 volatile,Java 线程内存模型确保所有线程看到这个变量的值是一致的。CPU 术语的定义。原创 2022-09-23 10:09:57 · 584 阅读 · 0 评论 -
FutureTask 详解
FutureTask 除了实现 Future 接口外,还实现了 Runnable 接口。因此,FutureTask 可以交给 Executor 执行,也可以由调用线程直接执行(FutureTask.run())。根据 FutureTask.run()方法被执行的时机,FutureTask 可以处于下面 3 种状态。1) 未启动: 当创建一个 FutureTask,且没有执行 FutureTask.run()方法之前,这个 FutureTask 处于未启动状态。原创 2022-09-22 20:32:00 · 1777 阅读 · 0 评论 -
ScheduledThreadPoolExecutor 详解
ScheduledThreadPoolExecutor 的功能与 Timer 类似, 但 ScheduledThreadPoolExecutor 功能更强大、更灵活。原创 2022-09-22 19:16:46 · 702 阅读 · 0 评论 -
ThreadPoolExecutor 详解
Executor 框架最核心的类是 ThreadPoolExecutor,它是线程池的实现类,主要由下列 4 个组件构成。corePool:核心线程池的大小。maximumPool:最大线程池的大小。BlockingQueue:用来暂时保存任务的工作队列。RejectedExecutionHandler:当 ThreadPoolExecutor 已经关闭或 ThreadPoolExecutor 已经饱和时(达到了最大线程池大小且工作队列已满),execute()方法将要调用的 Handler。原创 2022-09-22 14:40:56 · 370 阅读 · 0 评论 -
Executor 框架简介
Java 的线程既是工作单元,也是执行机制。从 JDK 5 开始,把工作单元与执行机制分离开来。,而执行机制由 Executor 框架提供。原创 2022-09-22 14:05:24 · 160 阅读 · 0 评论 -
Java 中的并发工具类
CyclicBarrier 默认的构造方法是 CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用 await 方法告诉 CyclicBarrier 我已经到达了屏障,然后当前线程被阻塞。@Overridetry {// 到达屏障c.await();}}try {// 到达屏障c.await();}// 1 2 或 2 1 到达顺序不唯一}}原创 2022-09-22 00:31:12 · 366 阅读 · 0 评论 -
Java 中的 13 个原子操作类
java.util.concurrent.atomic 包, 这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方 式。因为变量的类型有很多种,所以在 Atomic 包里一共提供了 13 个类,属于 4 种类型 的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。Atomic 包里的类基本都是使用 Unsafe 实现的包装类。原创 2022-09-21 16:58:14 · 372 阅读 · 0 评论 -
Fork/Join 框架
那么, 为什么需要使用工作窃取算法呢?假如我们需要做一个比较大的任务,可以把这个任务 分割为若干互不依赖的子任务,为了减少线程间的竞争,把这些子任务分别放到不同的 队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对 应。比如 A 线程负责处理 A 队列里的任务。但是,有的线程会先把自己队列里的任务干 完,而其他线程对应的队列里还有任务等待处理。干完活的线程与其等着,不如去帮其他线程干活,于是它就去其他线程的队列里窃取一个任务来执行。原创 2022-09-21 16:33:44 · 103 阅读 · 0 评论 -
Java 中的阻塞队列
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。原创 2022-09-21 15:29:01 · 2261 阅读 · 0 评论 -
ConcurrentLinkedQueue——非阻塞
在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现。非阻塞的实现方式则可以使用循环 CAS 的方式来实现。ConcurrentLinkedQueue 是一个,它采用的规则对节点进行排序,它采用了“wait-free”算法(即 CAS 算法) 来实现,该算法在 Michael&Scott 算法上进行了一些修改。原创 2022-09-21 10:31:09 · 434 阅读 · 0 评论 -
ConcurrentHashMap 的实现原理与使用
ConcurrentHashMap原创 2022-09-20 21:39:01 · 435 阅读 · 0 评论 -
Condition 接口
Condition原创 2022-09-20 16:09:43 · 578 阅读 · 0 评论 -
读写锁——ReentrantReadWriteLock
排他锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式。假设在程序中定义一个共享的用作缓存数据结构,它大部分时间提供读服务(例如查询和搜索),而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。原创 2022-09-20 11:06:58 · 508 阅读 · 0 评论 -
重入锁 ReentrantLock
参考《java并发编程艺术》重入锁,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。synchronized 关键字隐式的支持重进入,比如 一个 synchronized 修饰的递归方法,在方法执行时,执行线程在获取了锁之后仍能连续多次地获得该锁,而不像 Mutex 由于获取了锁,而在下一次获取锁时出现阻塞自己的情 况。原创 2022-09-20 09:27:36 · 110 阅读 · 0 评论 -
AQS 原理——参考《java并发编程艺术》
同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,在抽象方法的实现过程中免不了要对同步状态进行更改,这时就需要使用同步器提供的 3 个方法(getState()、setState(int newState)和 compareAndSetState(int expect,int update))来进行操作,因为它们能够保证状态的改变是安全的。原创 2022-09-20 00:14:25 · 407 阅读 · 0 评论 -
ThreadPoolExecutor——线程池
ThreadPoolExecutor 使用原创 2022-09-14 23:21:56 · 1741 阅读 · 0 评论 -
原子累加器——LongAdder&AtomicLong
LongAdder中add方法和longAccumulate方法解析原创 2022-09-13 00:41:51 · 452 阅读 · 0 评论