线程是一种线程与线程之间相互制约与交互的机制。
阻塞队列BlockingQueue:
-1 多个队列概念:
Queue: 队列,遵循先进先出
Deque:双端队列,先进后出,栈结构。
BlockingQueue: 阻塞队列,线程会等待非空(取),非满(写),适合生产者消费者场景。
-2 基本方法:add,offer,put,poll(取走排在首位对象),take(同上,但是队列为空会等待至加入有为止)
数组阻塞队列ArrayBlockingQueue:有界缓存区
链表阻塞队列LinkedBlockingQueue:
-1 说明:默认无限大小容量,生产者消费者锁独立,所以可并发处理数据。
-2 基本方法:offerLast、offer、add、addLast、pollFirst、removeFirst
优先级阻塞队列PriorityBlockingQueue:
支持优先级的无界阻塞队列
延时队列DelayQueue:
多久才能从队列中获取元素
-2 场景:循环查询,一旦能从该队列获取,表示缓存器到了。
-3 使用实例:
Delayed { //操作的对象必须实现 Delayed
....
}
同步队列SynchronizedQueue:
不存储元素的阻塞队列,每put一次就必须take一下。
-2 使用场景:适合传递性场景如一个线程数据传给另一个线程
链表双向阻塞队列LinkedBlockingDeque:
-1 说明:可从两端插入移除,多了addFirst、addFirst、offerFirst、offerLast、peekFirst、peekLast(获取最后一个元素)
同步计数器CountDownLatch:
-1 说明:计数器,计数到零前,await阻塞。
-2 使用场景:多线程上传,多个上传完才算完成。计数的await才不阻塞。
-3 基本方法:await、countDown(减少计数1)
Semaphore(3);--标识允许三个线程同时访问。
计数信号量,方法:x.acquire()和xx.release();