昨天简单的看了看Unsafe的使用,今天我们看看JUC中的原子类是怎么使用Unsafe的,以及分析一下其中的原理! 一.简单使用AtomicLong 还记的上一篇博客中我们使用了volatile关键字修饰了一个int类型的变量,然后两个线程,分别对这个变量进行10000次+1操作,最后结果不是200 ...
分类:
其他好文 时间:
2020-01-30 09:52:18
阅读次数:
77
使用锁能解决并发时线程安全性,但锁的代价比较大,而且降低性能。有些时候可以使用原子类(juc atomic包中的原子类)。还有一些其他的非加锁式并发处理方式,我写这篇文章来源于 "Java中有哪些无锁技术来解决并发问题" 的思考。 1.原子类场景 2.原子类分类 3.原子类实现原理 4.原子类使用d ...
分类:
编程语言 时间:
2020-01-22 18:10:33
阅读次数:
69
Java并发编程小总结:CountDownLatch、CyclicBarrier和Semaphore这几个类都是在JUC下,也就是java.util.concurrent包下。这两天学习了一下并发编程中的三个类的使用和一些应用场景,所以做一下记录和总结,方便自己日后再查看复现。 1、CountDow ...
分类:
编程语言 时间:
2020-01-21 18:18:45
阅读次数:
99
环境 jdk version:jdk1.8.0_171 一、Executor接口执行器接口,也是最顶层的抽象核心接口, 分离了任务和任务的执行。 二、ExecutorService接口在Executor的基础上提供了执行器生命周期管理,任务异步执行等功能。在Executor的基础上增强了对任务的控制 ...
分类:
编程语言 时间:
2020-01-18 14:53:28
阅读次数:
107
环境 jdk version:jdk1.8.0_171 一、CountDownLatchCountDownLatch是一个辅助同步器类,用来作计数使用,它的作用类似于生活中的倒数计数器,先设定一个计数初始值,当计数降到0时,将会触发一些事件,如火箭的倒数计时。初始计数值在构造CountDownLat ...
分类:
编程语言 时间:
2020-01-14 20:36:53
阅读次数:
103
第一种:使用Executors.newScheduledThreadPool实现定时任务 这种实现方式是阿里规范不推荐的使用方式,有资源耗尽的风险 第二种:使用ScheduledThreadPoolExecutor实现定时任务 推荐的方式 第三种:SpringBoot中定时任务的创建方式 方式一:使 ...
分类:
其他好文 时间:
2020-01-13 14:30:31
阅读次数:
75
1 Atomic 原子类介绍 Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 所以,所谓原子类说简单点就是具有 ...
分类:
其他好文 时间:
2020-01-10 00:37:54
阅读次数:
120
我们前面几张提到过,JUC 这个包里面的工具类的底层就是使用 CAS 和 volatile 来保证线程安全的,整个 JUC 包里面的类都是基于它们构建的。今天我们介绍一个非常重要的同步器,这个类是 JDK 在 CAS 和 volatile 的基础上为我们提供的一个同步工具类。 背景 Abstract ...
分类:
编程语言 时间:
2020-01-08 18:51:46
阅读次数:
82
CAS全称 Compare And Swap(比较与交换),在不使用锁的情况下实现多线程之间的变量同步。属于硬件同步原语,处理器提供了基本内存操作的原子性保证。juc包中的原子类就是通过CAS来实现了乐观锁。 CAS算法涉及到三个操作数: 需要读写的内存值 V。 进行比较的旧值A (期望操作前的值) ...
分类:
编程语言 时间:
2020-01-07 00:38:33
阅读次数:
97
载自:https://my.oschina.net/meandme/blog/1839265 好长一段时间前,某些场景需要JUC的读写锁,但在某个时刻内读写线程都报超时预警(长时间无响应),看起来像是锁竞争过程中出现死锁(我猜)。经过排查项目并没有能造成死锁的可疑之处,因为业务代码并不复杂(仅仅是一 ...
分类:
编程语言 时间:
2020-01-06 14:30:38
阅读次数:
97