
并发与多线程
文章平均质量分 80
学习永无止境
香草星冰乐
南京理工大学研究生,主要研究方向机器学习的隐私保护。
展开
-
(六)并发工具类 CompletableFuture(异步编程)
CompletableFuture(异步编程)CompletableFuture异步化CompletionStage 接口串行关系AND 聚合关系OR 汇聚关系异常处理案例CompletableFuture优势CompletableFuture异步化异步化是并行方案得以实施的基础,更深入地讲其实就是:利用多线程优化性能这个核心方案得以实施的基础。例如:将两个串行的操作,交给新创建的子线程去执行,主线程无需等待这两个任务执行完毕,这就是所谓的异步化操作Java 在 1.8 版本提供了 Completa原创 2021-07-07 10:38:43 · 495 阅读 · 1 评论 -
(五)并发工具类FutureTask
FutureTask多线程返回实现FutureTaskFutureTask 实现案例FutureTask多线程利用excute方法虽然可以提交任务,但是却没有办法获取任务的执行结果(execute() 方法没有返回值)。Java 通过 ThreadPoolExecutor 提供的 3 个 submit() 方法和 1 个 FutureTask 工具类来支持获得任务执行结果的需求。// 提交Runnable任务Future<?> submit(Runnable task);// 提交Ca原创 2021-07-07 09:48:50 · 258 阅读 · 0 评论 -
线程池之提交优先级与执行优先级
问题发现在使用newfixedThreadPool时设置核心线程10,最大线程20,采用arrayBlockingQueue10。在for循环里打印i,以及线程id,发现线程的顺序是先打印1到10,然后打印21到30。也就是说后提交的数据中间输出。提交优先级提交优先级:就是先交付核心线程、等待队列、非核心线程。代码如下:public void execute(Runnable command) { if (command == null) throw new NullP原创 2021-07-04 17:14:55 · 2384 阅读 · 2 评论 -
(四)并发工具类ReadWriteLock(读写锁)与StampedLock(读写锁优化)
ReadWriteLock(读写锁)与StampedLock(读写锁优化)ReadWriteLock读写锁降级StampedLock乐观读ReadWriteLock针对读多写少这种并发场景,Java SDK 并发包提供了读写锁——ReadWriteLock,其目的在于分场景优化性能,提升易用性。读写锁都遵守以下三条基本原则:允许多个线程同时读共享变量;只允许一个线程写共享变量;如果一个写线程正在执行写操作,此时禁止读线程读共享变量。读写锁类似于 ReentrantLock,也支持公平模式和原创 2021-07-04 16:47:46 · 485 阅读 · 0 评论 -
(三)并发工具类Semaphore(真正的限流器)
Semaphore(限流)概述信号量模型使用方法概述CountDownLatch(门闩)与CyclicBarrier(栅栏)看似需要等待线程数达到相同的数量才能继续执行,但它们并不能作为限流器使用,例如实现一个车辆限流,小于10辆直接通行,大于10辆则等待。CountDownLatch(门闩)与CyclicBarrier(栅栏)在小10辆时也无法通行,因此不适合作为限流器使用。Semaphore信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。信号量模型信号量模型原创 2021-07-04 16:20:58 · 162 阅读 · 2 评论 -
(二)并发工具类CountDownLatch(门闩)与CyclicBarrier(栅栏)
CountDownLatch(门闩)和CyclicBarrier(栅栏)CountDownLatch 实现线程等待CyclicBarrier 实现线程同步CountDownLatch 实现线程等待如何实现主线程需要等待子线程运行完毕才能运行,Java 并发包里已经提供了实现类似功能的工具类:CountDownLatch?定义:让一些线程阻塞直到另一些线程完成一些列操作之后才被唤醒。即使门闩的意思,给定一个数,当这个数被减到0时才能开始运行另一个线程。主要有两个方法一个是await方法等待,一个是co原创 2021-07-03 15:00:32 · 208 阅读 · 0 评论 -
(一)并发工具类Lock与Condition
Lock(互斥)与Condition(管程)概述可重入公平锁生产者消费者概述并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。这两大问题,管程都是能够解决的。Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程,其中 Lock 用于解决互斥问题,Condition 用于解决同步问题。为什么不用synchronized?因为synchronized无法破坏死锁中的请求与保持条件, synchronize原创 2021-07-03 14:43:21 · 272 阅读 · 0 评论 -
synchronized与CAS(更新)
synchronized与CAS(更新)synchronized(重量级锁)synchronized概念synchronized原理CAS(轻量级锁)CAS概念CAS底层ABA问题对象:对象创建过程对象的访问定位有哪两种⽅式堆内存中对象的分配的基本策略对象内存布局对象头hotspot实现锁升级过程锁消除 lock eliminate锁粗化 lock coarsening锁降级synchronized(重量级锁)synchronized概念原子性:synchronized保证语句块内操作是原子的可见性原创 2021-03-26 17:33:14 · 538 阅读 · 0 评论