多线程的认识(四)

一.Java阻塞队列

1.Java阻塞队列的原理:分为两种
(1)当队列为空的时候,消费者端会被阻塞
(2)当队列满了的时候,生产者端的队列会被阻塞。

2.介绍一个常遇到的Java的阻塞队列
1.ArrayBlockingQueue:数组阻塞队列,他的数据结构数组的有界的阻塞队列,遵循FIFO先进先出的原则,但是他是非公平的,无论是在生产者端,还是消费者端,他都是最先挂起的,最先去获取数据。
2.LinkBlockingQueue:列表阻塞队列,他的数据结构为链表的有界的阻塞队列,遵循FIFO的原则,与ArrayBlockingQueue有点类似,但是他在生产者端,和消费者端分别有锁,就是说生产者端和消费者端可以同时的去操作队列里面的元素。
3.PriorityBlockingQueue:具有优先级的无界阻塞队列,他的默认顺序为升序
4.DelayQueue:用于缓存和延迟的阻塞队列。
5.SynchronousQueue:里面不错存放任何一个元素的阻塞队列,他在进行PUT的时候,必须需要等待一个TAKE,他就类似于一个传递者而已,但是他的吞吐量比ArrayBlockingQueue,LinkBlockingQueue都大。
6.LinkedTransferQueue:他比一般的队列对了tryTransfer和Transfer方法,这两个方法都是会尝试,或者直接将生产者的元素直接的传递个消费者,或者到tail节点。

二.CountDownLatch(线程计数器),CyclicBarrier(会换-栅栏),Semaphore(信号量)

1.CountDownLatch:线程计数器,当一个任务需要等待其他的任务完成之后才可以继续执行下去,可以用到CountDoenLatch或者Join()方法
2.CyclicBarrier:一组线程需要统一到一个状态才可全部一起继续执行,可以用到CyclicBarrier。
3.Semaphore:信号量,控制可以同时访问的线程的数量,当数量为一的时候,可以做互斥锁。acquire(),tryAcquire():获取资源,release():释放资源。

三.volatile关键字

1.确保变量在各个线程之间的可见性。
2.禁止了指令重排序
3.但是他不确保原子性,所以i++还是需要注意
4.JMM-Java内存模型:
有一个主存和每条线程都有一个工作的额内存。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值