摘要: 并发编程从零开始(十五)-CompletableFuture 14 CompletableFuture 用法 从JDK 8开始,在Concurrent包中提供了一个强大的异步编程工具CompletableFuture。在JDK8之前,异步编程可以通过线程池和Future来实现,但功能还不够强大。 C 阅读全文
posted @ 2021-11-03 00:32 会编程的老六 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(十四)-Executors工具类 12 Executors工具类 concurrent包提供了Executors工具类,利用它可以创建各种不同类型的线程池 12.1 四种对比 单线程的线程池: 固定数目线程的线程池: 每接收一个请求,就创建一个线程来执行: 单线程具有周期调度功能的 阅读全文
posted @ 2021-11-02 19:02 会编程的老六 阅读(288) 评论(0) 推荐(1) 编辑
摘要: 并发编程从零开始(十三)-线程池 第三部分:线程池与Future 9 线程池的实现原理 下图所示为线程池的实现原理:调用方不断地向线程池中提交任务;线程池中有一组线程,不断地从队列中取任务,这是一个典型的生产者—消费者模型。 要实现这样一个线程池,有几个问题需要考虑: 队列设置多长?如果是无界的,调 阅读全文
posted @ 2021-11-02 16:11 会编程的老六 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(十二)-Lock与Condition 8 Lock与Condition 8.1 互斥锁 8.1.1 锁的可重入性 “可重入锁”是指当一个线程调用 object.lock()获取到锁,进入临界区后,再次调用object.lock(),仍然可以获取到该锁。显然,通常的锁都要设计成可重入 阅读全文
posted @ 2021-10-31 15:13 会编程的老六 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(十一)-Atomic类 7 Atomic类 7.1 AtomicInteger和AtomicLong 如下面代码所示,对于一个整数的加减操作,要保证线程安全,需要加锁,也就是加synchronized关键字。 但有了Concurrent包的Atomic相关的类之后,synchron 阅读全文
posted @ 2021-10-31 00:53 会编程的老六 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(十)-同步工具类 6 同步工具类 6.1 Semaphore Semaphore也就是信号量,提供了资源数量的并发访问控制,其使用代码很简单,如下所示: 有参方法tryAcquire(long timeout, TimeUnit unit)的作用是在指定的时间内尝试地获取1个许可, 阅读全文
posted @ 2021-10-28 23:46 会编程的老六 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(九)-ConcurrentSkipListMap&Set CAS知识点补充: 我们都知道在使用 CAS 也就是使用 compareAndSet(current,next)方法进行无锁自加或者更换栈的表头之类的问题时会出现ABA问题。 Java中使用 AtomicStampedRef 阅读全文
posted @ 2021-10-28 12:34 会编程的老六 阅读(477) 评论(0) 推荐(1) 编辑
摘要: 并发编程从零开始(八)-ConcurrentHashMap 5.5 ConcurrentHashMap HashMap通常的实现方式是“数组+链表”,这种方式被称为“拉链法”。ConcurrentHashMap在这个基本原理之上进行了各种优化。 首先是所有数据都放在一个大的HashMap中;其次是引 阅读全文
posted @ 2021-10-27 18:26 会编程的老六 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(七)-ConcurrentLinkedQueue ####5.4 ConcurrentLinkedQueue/Deque AQS内部的阻塞队列实现原理:基于双向链表,通过对head/tail进行CAS操作,实现入队和出队。(队列中存放的是线程) ConcurrentLinkedQu 阅读全文
posted @ 2021-10-27 16:50 会编程的老六 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 并发编程从零开始(六)-BlockingDeque+CopyOnWrite 5.2 BlockingDeque BlockingDeque定义了一个阻塞的双端队列接口: 该接口继承了BlockingQueue接口,同时增加了对应的双端队列操作接口。该接口只有一个实现,就是LinkedBlocking 阅读全文
posted @ 2021-10-27 15:23 会编程的老六 阅读(103) 评论(0) 推荐(0) 编辑