线程池的阻塞队列有哪几种
时间: 2023-11-29 18:47:39 浏览: 42
线程池的阻塞队列主要有以下几种:
1. LinkedBlockingQueue:一个基于链表结构的阻塞队列,按照先进先出的原则对元素进行排序。
2. ArrayBlockingQueue:一个基于数组结构的有界阻塞队列,按照先进先出的原则对元素进行排序。
3. SynchronousQueue:一个不存储元素的阻塞队列,每个插入操作必须等待另一个线程的移除操作,否则插入操作一直处于阻塞状态。
4. PriorityBlockingQueue:一个具有优先级的无界阻塞队列,按照优先级顺序对元素进行排序。
5. DelayQueue:一个使用优先级队列实现的延迟无界阻塞队列,只有在延迟期满时才能从中提取元素。
代码演示:
```python
import queue
import threading
# 创建一个阻塞队列
q = queue.Queue()
# 定义一个线程函数
def worker():
while True:
item = q.get()
if item is None:
break
print(item)
q.task_done()
# 创建多个线程
threads = []
for i in range(5):
t = threading.Thread(target=worker)
t.start()
threads.append(t)
# 向队列中添加元素
for item in range(10):
q.put(item)
# 阻塞直到所有任务完成
q.join()
# 停止所有线程
for i in range(5):
q.put(None)
for t in threads:
t.join()
```