鱼C论坛

 找回密码
 立即注册
查看: 2839|回复: 0

[学习笔记] Java多线程10

[复制链接]
发表于 2017-6-26 23:02:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
实现生产者/消费者模式:一对一交替打印
Set()  get()  一个布尔值 hasValue判断另一线程是否打印,防止同一线程多次打印,实现交替打印
可利用对象数组结合Thread实现多对多交替打印   signalAll()通知

公平锁与非公平锁
公平锁表示线程获取锁的顺序是按照线程加锁的顺序分配,先来先得,先进先出
非公平锁为随机获得锁
类ReentrantLock()
ReentrantLock(boolean fair)创建一个具有给定公平策略的ReentrantLock
          如果使用公平的排序策略则 fair为true
方法:
Int getHoldCount() 返回当前lock()方法被调用的次数

Int getQueueLength()  返回当前在等待lock释放的线程个数

boolean hasQueuedThread(Thread thread) 查询指定的线程是否在等待获取此锁定

boolean hasQueuedThreads() 查询是否有线程正在等待获取此锁定

Boolean hasWaiters(Condition condition) 查询是否有线程正在等待与此锁定有关的condition条件

Int getWaitQueuedLength(Condition condition) 返回当前在等待获取与此锁定有关的condition条件的线程个数

Boolean isHeldByCurrentThread() 查询当前线程是否保持此锁定

Boolean isLocked() 查询此锁定是否由任意线程保持

lockInterruptibly() 如果调用此方法锁定方法,如果线程在获得此锁定时被中断则抛出异常

Boolean tryLock() 当锁定未被其他线程保持时,线程才能获取此锁定 ,
                                 返回一个boolean值 是否成功

Boolean tryLock(long timeout, TimeUnit unit) 锁定在给定等待时间内没有被另一个线程保持,且当前线程未被中断,则获取该锁定

Condition接口
方法:
awaitUninterruptibly()   调用condition的await()方法,且即使当前线程被中断也保持休眠状态,继续等待

Boolean awaitUntil(Date deadline)  造成当前线程在接到信号、被中断或到达指定最后期限之前一直处于等待状态  可配合Calendar使用

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表