基于链表的阻塞队列,其底层数据结构是链表;列表维护先入先出; 链表的大小在初始化时可以设置,默认是Integer的最大值; 可以使用Collection 和 Iterator两个接口所有的操作
JDK 提供一种线程安全的List,多线程环境下可以直接使用,通过锁 + 数组拷贝 + volatile 保证线程的安全,所有的操作都是线程安全的,每次数组操作都是拷贝一分出来,在新数组上进行操作,之后再赋值回去;迭代过程不会影响原来的数组
CompletionService 的实现原理也是内部维护了一个阻塞队列,当任务执行结束就把任务的执行结果加入到阻塞队列中,不同的是 CompletionService 是把任务执行结果的 Future 对象加入到阻塞队列中
异步化是并发实施的的基础吗,,利用多线程优化性能这个核心方案得以实施的基础,Java 在 1.8 版本提供了 CompletableFuture 来支持异步编程,CompletableFuture 有可能是你见过的最复杂的工具类
目前线程池的使用模式是生产者-消费者模式,线程池的使用方是生产者,线程池本身是消费者
对于简单的原子性问题,JDK包装了一系列的实现原子类,相对于互斥方案,无锁类性能高,解决了互斥问题,没有加锁和解锁的操作,以及对线程切换的性能损耗
线程不安全的情况下使用Map,可以使用ConcurrentHashMap,内部封装了锁和各种数据结构来保证访问Map是线程安全的
CountDownLatch允许一个或多个线程等待其他线程完成操作。CyclicBarrier它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行
读多写少的场景中,还有没有更快的技术方案,Java 在 1.8 这个版本里,提供了一种叫 StampedLock 的锁,它的性能就比读写锁还要好。
针对读多写少,JDK提供了ReadWriteLock,容易使用且性能较好;读写锁允许多个线程读共享变量,只允许一个线程写共享变量,如果一个线程写共享变量时,禁止读线程读共享变量
用来控制同时访问特定资源的线程数量,它通过协调线程,合理的使用公共资源
队列同步器AbstractQueuedSynchronizer,用来构建锁或其他同步组件的基础框架,使用int变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作
Java 通过Lock和Condition 两个接口实现管程,Lock解决互斥问题,Condition解决同步问题
Java领域实现并发的主要手段就是多线程,而线程是有生命周期的,要学好他需要搞懂生命周期中各个节点的的转态转化机制。同时针对多线程如何配置合适的线程数,以及具体的使用场景
管程就是一把解决并发问题的万能钥匙
并发编程的问题总结 -- 安全性、活跃性和性能
互斥锁 -- 解决并发的原子性问题
解决Java并发编程中的有关可见性和有序性问题 --- Java 内存模型
并发领域核心问题: 分工、同步、互斥,前两者强调性能,后者强调执行的正确性
并发的核心矛盾便是CPU、内存、I/O之间的速度差异。
Java Nginx 消息队列 Kubernetes 系统架构 Redis Tomcat MySQL Spring 工作问题 分布式基础 并发
Copyright © 2015 Powered by MWeb, Theme used GitHub CSS.