随笔分类 -  并发编程

摘要:前面 使用自旋锁实现了一把锁,(请看 第5篇) volatile 三大特性: 可见性, 不保证原子性, 禁止指令重排 为了解决 volatile不保证原子性的问题, 引入了原子类, AtomicInteger, 底层是使用了 CAS 直接变成汇编指令操作硬件,从而解决了 原子性的问题 而 Lock 阅读全文
posted @ 2020-09-21 11:38 死不了好气呦 阅读(310) 评论(0) 推荐(0)
摘要:这里引用别人博客,不重复造轮子 https://blog.csdn.net/u012881584/article/details/105886486 https://www.cnblogs.com/waterystone/p/4920797.html https://blog.csdn.net/zc 阅读全文
posted @ 2020-09-17 17:28 死不了好气呦 阅读(115) 评论(0) 推荐(0)
摘要:直接上代码 class LinkedBlockingDequeDemo { // 循环是否结束的开关 private static volatile boolean flag1 = true; private static volatile boolean flag2 = true; // 生成者生 阅读全文
posted @ 2020-09-08 16:42 死不了好气呦 阅读(217) 评论(0) 推荐(0)
摘要:##先看DelayQueue 这个是用优先级队列实现的无界限的延迟队列,直接上代码: /** * 这个是 {@link DelayQueue} 延时队列 的验证使用类 */ class MyDelayed implements Delayed { private long delayTime;//该 阅读全文
posted @ 2020-09-08 14:41 死不了好气呦 阅读(306) 评论(0) 推荐(0)
摘要:##三大方法: //线程池核心线程数为n, 最大线程数为 n ExecutorService fixedThreadPool = Executors.newFixedThreadPool(n); 源码: 可以看到核心线程数, 和最大线程数相同, 这种线程池伸缩性,扩展性不好 //线程池核心线程数为1 阅读全文
posted @ 2020-08-30 17:21 死不了好气呦 阅读(249) 评论(0) 推荐(0)
摘要:直接上代码: 前提是你已经 熟悉了原子类,volatile,和阻塞队列 public class JucPCdemo03 { /** * 阻塞队列的应用: 这里实现的生产者消费者,生产一个消费一个 * 且,不使用 synchronized 和 lock锁 */ private volatile bo 阅读全文
posted @ 2020-08-28 11:08 死不了好气呦 阅读(168) 评论(0) 推荐(0)
摘要:这些队列的 api ,就是添加队列,出队列,检测对首元素, 由于 add()--remove(), offer()--poll(),太简单这里不做验证, 只验证后二组api: 阻塞等待( put()--take() ), 超时等待( offer()--poll() ) 多线程下,验证: public 阅读全文
posted @ 2020-08-27 16:09 死不了好气呦 阅读(211) 评论(0) 推荐(0)
摘要:问: 了解volatile关键字么? 答: 他是java 的关键字, 保证可见性, 不保证原子性, 禁止指令重排 问: 你说的这三个特性, 能写代码证明么? 答: .... 问: 听说过 CAS么 他的缺点是什么? 什么是ABA, 怎么解决? 问: 请手写一个自旋锁? 可见性证明: 接下来看使用 了 阅读全文
posted @ 2020-08-26 16:16 死不了好气呦 阅读(368) 评论(0) 推荐(0)
摘要:CountDownLatch 相当于一个减法计数器, 构造方法指定一个数字,比如6, 一个线程执行一次,这个数字减1, 当变为0 的时候, await()方法,才开始往下执行,, 看这个例子 CyclicBarrier 的用法, 字面意思:循环栅栏, 这是构造方法, 第一个参数parties 是线程 阅读全文
posted @ 2020-08-11 10:32 死不了好气呦 阅读(481) 评论(0) 推荐(0)
摘要:如何判断锁的是谁? 永远知道是什么锁, 线程8锁:就是关于锁的8个问题 问题1: public class LockDemo01 { public static void main(String[] args) throws InterruptedException { //8 锁--1 //资源类 阅读全文
posted @ 2020-08-10 21:48 死不了好气呦 阅读(181) 评论(0) 推荐(0)
摘要:synchronized的写法 class PCdemo{ public static void main(String[] args) { //多个线程操作同一资源 Data data = new Data(); new Thread(()->{ for (int i = 0; i < 10; i 阅读全文
posted @ 2020-08-10 17:22 死不了好气呦 阅读(197) 评论(0) 推荐(0)
摘要:进程: 就是一个程序, 里面包含多个线程, 比如一个QQ程序 线程: 进程中最小的调度单元, 比如 QQ中的自动保存功能 并发: 多个线程操作同一资源, 抢夺一个cpu的执行片段, 快速交替 并行: 多个线程一起执行 线程有几个状态: NEW(新) , RUNNABLE(运行) , BLOCKED( 阅读全文
posted @ 2020-08-10 15:51 死不了好气呦 阅读(257) 评论(0) 推荐(0)