
并发编程
文章平均质量分 87
从底层熟悉并发编程
刺豚灬
小小java架构师
展开
-
12 原子性|可见性|有序性|JMM内存模型
一个或多个操作,要么全部执行,要么全部不执行。Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,但不采取任何原子性保障措施的自增操作不是原子性的,如:i++上述结果每次执行都不一致,说明发生了线程安全问题sychronized、lock锁、CAS(AtomicInteger)原创 2023-10-26 11:59:40 · 89 阅读 · 0 评论 -
11 Fork/Join
并行计算框架,用来支持分治任务模型的,Fork对应的是分治任务模型里的任务分解Join对应的是结果合并。原创 2023-10-24 11:54:49 · 95 阅读 · 0 评论 -
10 读写锁ReentrantReadWriteLock
为什么要使用读写锁?需要高并发读取和较低并发写入的应用程序,降低锁的粒度,提高系统性能使用场景读多写少的共享资源缓存管理:读 >> 写,控制多个线程同时读缓存,需要刷新or修改操作时才使用写锁数据库连接池:多个线程从池中获取连接(读操作),只有一个线程可以设置连接到池中(写操作)文件读写数据结构的并发访问。原创 2023-10-23 12:00:12 · 277 阅读 · 0 评论 -
9 线程池
为什么要使用线程池?1 重复利用已创建的线程,减少线程创建和销毁带来的开销2 提高响应速度:任务可以不用等待线程创建就能立即执行(T1 创建线程 T2执行任务 T3销毁线程),若T1+T3>T2,可以通过线程池提高响应速度3 提高线程可管理性:线程是稀缺资源,会降低系统稳定性,通过线程池可以对线程进行统一分配、调优和监控。原创 2023-10-20 18:07:57 · 148 阅读 · 0 评论 -
8 阻塞队列
如果队列满,往BlockingQueue中插入数据时,线程会阻塞直到队列非满;当阻塞队列空时,从BlockingQueue中取数据时,线程会阻塞直到队列非空。原创 2023-10-18 17:44:33 · 69 阅读 · 0 评论 -
7 ReentrantLock底层
java.util.concurrent包都是围绕共同的行为,如:等待队列、条件队列、独占获取、共享获取等;而这些基本上由AQS提供(Lock、Latch、Barrier等,都是基于AQS来实现内部类Sync继承AQS将同步器调用的方法映射到Sync对应的方法AQS具备的特性阻塞等待队列共享/独占公平/非公平可重入允许中断。原创 2023-10-18 11:59:26 · 60 阅读 · 0 评论 -
6 并发工具类
可重入的独占锁,允许同一线程多次获取同一锁而不会被阻塞;功能类似于synchronized,是一种互斥锁ReentrantLock具备如下特点:可中断 interrupt()可以设置超时时间公平 非公平支持多个条件变量与sychronized一样,支持可重入。原创 2023-10-16 21:59:12 · 73 阅读 · 0 评论 -
5 CAS详解
假定有两个操作 A 和 B,如果从执行 A 的线程来看,当另一个线程执行 B 时,要么将 B全部执行完,要么完全不执行 B,执行 B 的线程看 A 的操作也是一样的,那么 A和 B 对彼此来说是原子的synchronized 关键字是基于阻塞的锁机制,但有几个问题:阻塞的线程优先级很高锁的线程一直不释放锁死锁之类的情况锁机制是一种粒度比较大的机制为了解决这个问题,Java 提供了 Atomic 系列的原子操作类。原创 2023-10-13 18:59:13 · 49 阅读 · 0 评论 -
4 导致JVM内存泄漏的ThreadLocal
访问一个变量的每个线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本ThreadLocal使用场景?原创 2023-10-11 20:03:46 · 60 阅读 · 0 评论 -
3 深入理解并发编程(下)
多个线程同时访问同一个变量,会导致不可预料的结果上述代码执行的结果均是 10000+原创 2023-10-09 21:11:18 · 54 阅读 · 0 评论 -
2 深入理解并发编程(中)
阻塞block:仅sychronized,ReetrentLock只会导致线程等待。原创 2023-10-07 22:45:46 · 58 阅读 · 0 评论