![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java高并发
CHANJIAJIA
stay hungry, stay foolish!
展开
-
5分钟手撸一个阻塞队列
阻塞队列其实就是额外增加了两个附加操作的队列在队列已满的情况下,如果继put添加加元素就会阻塞等待;在队列为空的情况下,如果从队列中take获取元素就会阻塞等待;接下来我会使用ReentrantLock+Condition的方式来手撸一个阻塞队列,主要的方法就是put()和take()。import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * @p.原创 2020-07-01 08:52:51 · 434 阅读 · 0 评论 -
让我们来聊一聊”死锁“
在多线程的世界里,一个不小心可能就会造成”死锁“,一旦”死锁“了意味着CPU会一直在空转,结果就是CPU一下子飙到100%,所以避免死锁的前提,就要去聊聊什么是”死锁“以及如何去避免死锁。什么是死锁?死锁指的是,两个或者多个线程,持有了彼此请求的资源,导致线程之间互相在等待对方释放资源,所以造成了死锁,下面我们来手撸一个简单的死锁例子。public class DeadLock { public static void main(String[] args) { O.原创 2020-06-29 23:14:40 · 519 阅读 · 0 评论 -
面试官:volatile是如何保证可见性和有序性的?
volatile保证可见性的原理可见性问题可见性问题指的是一个线程在访问一个共享变量的时候,其他线程对该共享变量的修改对于第一个线程来说是不可见的,下面通过一个例子可以发现可见性问题。public class Visable { private static boolean flag = true; public static void main(String[] args) throws InterruptedException { new Thread(()原创 2020-05-10 20:36:36 · 2901 阅读 · 5 评论 -
一层一层揭开synchronized的神秘面纱
前言在上一篇讲解CAS的文章里提到synchronized加锁开销很大,那么为什么会开销大呢?这篇文章主要讲解的内容是synchronized的底层原理以及锁升级的过程。并发编程的三大问题首先我们要知道为什么要使用synchronized加锁,那是因为在并发编程中会出现原子性问题、可见性问题、有序性问题,导致结果不是我们希望的,所以需要进行同步操作,而使用synchronized加锁是...原创 2020-04-22 20:20:21 · 249 阅读 · 0 评论 -
深入理解CAS底层原理及其应用
文章目录前言模拟一个高并发场景Q:最后结果却不是1000,这是为什么呢?Q:那么应该如何保证结果的正确性呢?Q:在Java中如何实现这种排队效果呢?Q:如何解决耗时过长的问题呢?CAS算法底层原理Q:CAS底层是如何?Q:lock前缀的作用CAS在Java中的应用Q:AtomicInteger类是怎么支持CAS算法的?CAS的缺点什么是ABA问题?怎么解决?循环时间长开销大只能保证一个共享变量的原...原创 2020-04-21 10:18:01 · 935 阅读 · 0 评论