0
点赞
收藏
分享

微信扫一扫

Java并发编程从入门到精通 之 第五章 多线程之间交互:线程阀


线程是一种线程与线程之间相互制约与交互的机制。

阻塞队列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();


举报

相关推荐

0 条评论