单例模式+生产者消费者问题+死锁

真正的多线程开发,降低耦合性

多线程就是一个独立的资源类,没有任何附属操作

属性和方法

 

 

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 

 

Synchronized和lock区别

 -------------------------------------------------------------------------------------------------------------------------------------------------------

线程之间的通信问题:生产者和消费者问题。等待唤醒, 通知唤醒

线程交替执行     A   B    操作同一个变量 num=0

流程:判断等待,业务,通知

 八锁

锁的是对象或者是Class类模板;

普通方法锁的是调用者对象

static方法锁的是Class类模板

 -------------------------------------------------------------------------------------------------------------------------------------------------------

多线程集合

Vector 底层Synchronize 提起synchronize就是效率低

CopyOnWriteArrayList 、CopyOnWriteArraySet  写入时复制 lock锁  复制出一个新数组,add数据,然后再把新数据复制给旧数组

ConcurrentHashMap 分段锁

创建线程三种方式:Thread继承类、Runnable接口、Callable接口(可以有返回值、可以抛出异常)

 -----------------------------------------------------------------------------------------------------------------------------------------------------------------

CountDownLatch 减法计数器  测试四家OCR识别效果,开启四个线程去测试,完成一个线程-1,CountDownLatch达到0再唤醒主线程

CyclicBarrier 加法计数器

Semaphere  信号量    多个共享资源互斥的使用,   并发限流、控制最大线程数

 semaphere.acqueire()  获得 加入已经满了,等待,等待释放为止

 semaphere.release()  释放 会将信号量释放 +1,唤醒等待的线程

 -------------------------------------------------------------------------------------------------------------------------------------------------------

ReadWriteLock 读写锁  

读锁:共享锁 一次可以被多个线程共享

写锁:独占锁 一次只能被一个线程占有

读读:可以共享

读写:不可共享

写写:不可共享

 -------------------------------------------------------------------------------------------------------------------------------------------------------

BlockingQueue 阻塞队列

场景:多线程并发处理,多线程池

 

 

 

 -------------------------------------------------------------------------------------------------------------------------------------------------------

线程池(重点)

 

三大方法:

 

 

 七大参数:

银行办理业务讲解线程池原理

 

 

四种拒绝策略:

拒中丢老调(线程池拒绝策略:中止策略、丢弃策略、弃老策略、调用者运行策略)
简单回答使用场景:
  • 中止策略:无特殊场景。
  • 丢弃策略:无关紧要的任务(博客阅读量)。
  • 弃老策略:发布消息。
  • 调用者运行策略:不允许失败场景(对性能要求不高、并发量较小)。
posted @ 2022-08-23 12:56  zhaoyanhao  阅读(76)  评论(0编辑  收藏  举报