加载中...
第3章 JDK并发包
发表于:2021-07-27 | 分类: 《Java高并发程序设计》读书笔记
字数统计: 334 | 阅读时长: 1分钟 | 阅读量:

3.1.1 重入锁ReentrantLock和synchronized的区别

1
2
3
4
5
6
7
8
9
10
11
12
public static ReentrantLock lock = new ReentrantLock();
@Override
public void run(){
for(int i = 0;i<1000;i++){
lock.lock();//指定何时加锁
try{
i++;
}finally{
lock.unlock();//指定何时解锁
}
}
}
  • ReentrantLock的特点:
    • 在等待锁的过程中,可以中断线程让他不再等待,lock.lockInterruptibly()
    • 可以指定公平锁或者非公平锁
      • 公平锁的意思就是当锁可用时,先申请该锁的线程先获得锁
    • 提供了Condition类,可以实现synchronized类似wait/notify的功能
  • 当需要使用ReentrantLock这三个特点时使用,其他时候可以使用synchronized

3.1.3 信号量(Semaphore)

  • 用来指定同时可以有多少线程访问某个资源

3.1.4 ReadWriteLock读写锁

  • 读写锁是为了防止读操作和读操作之间不阻塞,读写锁访问约束如下图所示


3.1.5 倒计时器(CountDownLatch)

  • 适用场景:火箭发射
  • 主线程在CountDownLatch上等待,当所有前置任务完成后,主线程再执行

3.2 线程池

首先是线程池框架:


如何使用线程池?

  • 常用的线程池

  • 手动创建线程池

  • 线程池实现原理

  • 即和corePoolSize、workQueue、maximumPoolSize比较

3.3 JDK并发容器(仅了解,后续专门出专栏深入分析)

  • ConcurrentHashMap
  • CopyOnWriteArrayList
  • BlockingQueue
  • ConcurrentSkipListMap
上一篇:
第4章 锁的优化
下一篇:
第7章 类加载机制
本文目录
本文目录