`java.util.concurrent` 介绍 是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待 1. 2. `boolean await(long timeout, TimeUnit unit) countDownLatch.countDown() tru ...
分类:
其他好文 时间:
2019-08-26 00:23:28
阅读次数:
76
`java.util.concurrent;` 是一个线程安全的 ,通过内部的 和`显式锁ReentrantLock`来实现线程安全。 是线程安全的 ,它是由 实现,内部持有一个 引用,所有的操作都是由 来实现的,区别就是 是无序的,并且不允许存放重复值。 适用场景 1. 适合元素比较少,并且读取操 ...
分类:
其他好文 时间:
2019-08-26 00:09:04
阅读次数:
71
(简称JUC)包,在此包中增加了在并发编程中很常用的工具类 用于定义类似于线程的自定义子系统,包括 ,`异步 IO 轻量级任务框架`,还提供了设计用于多线程上下文中 的 等 volatile 关键字 ...
分类:
其他好文 时间:
2019-08-25 21:34:43
阅读次数:
95
当多个线程访问共享数据的时候,多个线程之间是彼此不可见的,此时就会出现线程安全问题,但是我们知道使用synchronized关键字进行加锁实现同步是可以解决问题的,但是这种方法的效率比较低。 volatile的作用就是多个线程访问共享数据的时候,在内存中的共享数据对多个线程彼此是可见的。相较于syn ...
分类:
其他好文 时间:
2019-08-19 13:22:47
阅读次数:
151
SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析、格式化都会导致程序出错,接下来就讨论下它为何是线程不安全的,以及如何避免。 问题复现 编写测试代码如下: ...
分类:
编程语言 时间:
2019-08-15 22:50:56
阅读次数:
114
Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容。 这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类。当然这些都是并发编程的基本知识,除了使用这些工具以外,Java并发编程中涉及到的技术原理十分丰富。为了更好地把并发知识形成一个体系,也鉴于本人没有能力写出这类文章,于是参考 ...
分类:
编程语言 时间:
2019-08-11 15:33:48
阅读次数:
135
juc.CountDownLatch 闭锁 一个线程在等待一组线程后再恢复执行 await()等待其他线程执行完毕 被等待线程执行完毕后计数器-1 如何知道其他线程执行完了? 计数器,若一组线程为,CountDown为5,减到0代表等待线程被全部执行完毕 一次性工具:当Countdown的值减到0的 ...
分类:
其他好文 时间:
2019-08-08 00:25:54
阅读次数:
108
一、java代码模拟并发 1.1、一次并发 单次并发测试 1、使用CountDownLatch 等待一个或多个线程一起执行 详细参看:007-多线程-锁-JUC锁-CountDownLatch-闭锁【允许一个或多个线程,等待其他一组线程完成操作,再继续执行】 示例代码 输出: 2019-08-02T ...
分类:
编程语言 时间:
2019-08-06 21:20:40
阅读次数:
260
AQS 关于CLH大量使用到的Unsafe的CAS用法,头两个入参是this和xxOffset,翻了一下牛逼网友的给的代码大概是处理一个内存对齐的问题,整个操作中涉及到offset(dest)有两个部分 Unsafe不面向普通开发者,上来就检查你的类加载器是不是null(native) 先mark一 ...
分类:
其他好文 时间:
2019-07-28 10:59:29
阅读次数:
111
Q1:为什么非常高的并发请求下AtomicLong的性能会有很大影响?有没有什么更好的替代方案? 虽然AtomicLong使用CAS但是CAS失败后还是通过无限循环的自旋锁不断尝试的,在高并发下N多线程同时去操作一个变量会造成大量线程CAS失败然后处于自旋状态,这大大浪费了CPU资源,降低了并发性。 ...
分类:
编程语言 时间:
2019-07-24 00:28:26
阅读次数:
126