多线程最最经典案例就是上一章的单例设计模式。
当然除了单例设计模式,还有其他的案例。
本章就 一一 来介绍。
阻塞队列
这里是第一次提到阻塞队列这个东西,简单介绍一下,什么是阻塞队列:
阻塞队列(BlockingQueue) 是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。
阻塞队列常用于生产者消费者模式:
生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。
这个先不管,等会就详细介绍。
那么我们在网上查一查有哪些阻塞队列呢?
- ArrayBlockingQueue : 一个由数组结构组成的有界阻塞队列。
- LinkedBlockingQueue : 一个由链表结构组成的有界阻塞队列。
- PriorityBlockingQueue : 一个支持优先级排序的无界阻塞队列。
等等....;
这个东西非常有用,尤其是实现多线程时,多线程之间进行数据交互。
可以使用阻塞队列来简化代码编写。
并且它是线程安全的。
那我们先来看看生产者——消费者模式。
生产者——消费者模式
比如我们引入一个生活中的例子:
比如家里逢年过节的包饺子,假设有四个滑稽老铁,在包饺子,假设有一个擀面杖,一个用了擀面杖,其他人就要等待。
那么我们想要提高效率,多几个擀面杖不行吗?
可以的,就算多了几个擀面杖,四个滑稽老铁仍然需要 擀个饺子皮,包一个饺子。
所以我们可以引入这样的模式来加快效率:
一个老铁负责生产饺子皮,另外三个老铁取消费饺子皮。
这样比起来效率相对会加快。
既然我们引进了生产者——消费者模式,那为啥我们要引进这样的模式呢?有啥有用的呢?
当然不只是增加效率拉。
1.让代码块之间解耦合
之前总是听说,高耦合低内聚,高内聚低耦合,啥啥啥的,从来没明白过。
这里来解释一下,啥叫耦合,啥叫内聚。
耦合:影响性强弱
内聚:关联性强弱
内聚就是功能一样的代码放在一起,举个例子,衣服要分门别类的放,就是相同的一类的要放在一起
高内聚低耦合:关联性强,相互影响性弱; 高耦合低内聚:关联性弱,相互影响性高。
我们来举个栗子(🌰)
有两个服务器相互交互数据:
正常情况下,二者相安无事,突然有一天,我们某个服务器崩了,假设 A 崩了,那么 B 发出的请求,得不到相应了。
那么此时 他们两个就是 耦合性高了。
所以我们需要降低耦合性。
这么降低呢?
我们就要用到阻塞队列。
我们在此基础上加上一个 阻塞队列, A 和