![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
3 并发编程
文章平均质量分 54
学习并发编程知识
高秉文
从前端到后端到项目部署,全栈学习。系统学习各种知识,进而进阶java架构师。
展开
-
05 读写锁
1 为什么要使用读写锁,不使用synchronized 使用synchronized synchronized搭配等待通知机制完成并发控制(写操作开始的时候,所有晚于写操作的读操作都会进入等待状态),只有写操作完成并通知后才会将等待的线程唤醒继续执行。 使用读写锁 读写锁实现,只需要在读操作的时候获取读锁,写操作的时候获取写锁。当写锁被获取到的时候,后续操作(读写)都会被阻塞,只有在写锁释放之后才会执行后续操作。 2ReentrantReadWriteLock 特点: 具有与Reent..原创 2021-12-11 20:53:55 · 375 阅读 · 0 评论 -
04 死锁
死锁概念 A持有B,B持有A,互相等待对方释放锁,而阻塞任务 怎么防止死锁 (1)加锁顺序 线程按照一定的顺序加锁 (2)加锁时限 线程获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁 4 产生死锁的例子```java /** * 死锁案例 * * @author gaorimao * @since 2021-12-10 */ public class DeadLock implements Runnable { public int flag = 1原创 2021-12-10 21:23:00 · 230 阅读 · 0 评论 -
01-线程基础
java并发编程01-线程基础原创 2021-06-07 20:26:07 · 607 阅读 · 0 评论 -
02 线程池处理并发任务
import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.Ex.原创 2021-08-06 10:04:49 · 525 阅读 · 0 评论 -
03 线程池的拒绝策略
1 为什么要自定义线程池 FixedThreadPool 和 SingleThreadPool 允许的请求队列长度为 Integer.MAX_VALUE ,会堆积大量请求OOM CachedThreadPool 和 ScheduledThreadPool 允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量线程OOM 2 如何自定义线程池 public ThreadPoolExecutor(int corePoolSize,原创 2021-08-06 10:04:38 · 186 阅读 · 0 评论