Java多线程问题--方法hasQueueThread(Thread thread)、hasQueueThreads()和hasWaiters(Condition condition)的用法和区别

42 篇文章 0 订阅
订阅专栏
29 篇文章 0 订阅
订阅专栏

本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!

代码地址:https://github.com/xianzhixianzhixian/thread.git

方法hasQueueThread(Thread thread)、hasQueueThreads()和hasWaiters(Condition condition)的用法和区别

1、方法lock.hasQueueThread(Thread thread)的作用是查询指定的线程是否在等待获取此锁,就是当前该线程是否处于等待获取该锁的状态

2、方法lock.hasQueueThreads()的作用是检测当前是否有线程在等待获取该锁

3、方法lock.hasWaiters(Condition condition)的作用是检测当前是否有线程已调用condition.await()并且处于await状态

方法hasQueueThread(Thread thread)、hasQueueThreads()用法示例

Service.java

/**
 * 方法lock.hasQueueThread(Thread thread)的作用是查询指定的线程是否在等待获取此锁定,就是当前该线程是否处于未获取锁的状态
 * 方法lock.hasQueueThreads()的作用是检测当前是否有线程在等待获取该锁定
 * @author: xianzhixianzhixian
 * @date: 2019-01-16 20:15
 */
public class Service {
    public ReentrantLock lock = new ReentrantLock();
    public Condition condition = lock.newCondition();
    public void lockMethod(){
        try {
            lock.lock();
            Thread.sleep(Integer.MAX_VALUE);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
}

Run.java

/**
 * @author: xianzhixianzhixian
 * @date: 2019-01-16 20:37
 */
public class Run {
    public static void main(String[] args) throws Exception {
        final Service service = new Service();
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                service.lockMethod();
            }
        };
        Thread threadA = new Thread(runnable);
        threadA.start();
        Thread.sleep(500);
        Thread threadB = new Thread(runnable);
        threadB.start();
        Thread.sleep(500);
        System.out.println(service.lock.hasQueuedThread(threadA));
        System.out.println(service.lock.hasQueuedThread(threadB));
        System.out.println(service.lock.hasQueuedThreads());
    }
}

运行结果:线程A先启动占用了锁,线程B则一直处于等待锁的状态。所以第一行是false,第二行是true。当前有线程在等待锁,第三行为true。

方法hasWaiters(Condition condition)用法示例

ServiceHasWaiters.java

/**
 * 方法lock.hasWaiters(Condition condition)的作用是检测当前是否有线程已调用condition.await()并且处于await状态
 * @author: xianzhixianzhixian
 * @date: 2019-01-16 21:19
 */
public class ServiceHasWaiters {
    private ReentrantLock lock = new ReentrantLock();
    private Condition condition = lock.newCondition();
    public void waitMethod(){
        try {
            lock.lock();
            condition.await();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }

    public void notifyMethod(){
        try {
            lock.lock();
            System.out.println("有没有线程正在等待condition?"
                        +lock.hasWaiters(condition)+"线程数是多少?"
                        +lock.getWaitQueueLength(condition));
            condition.signal();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
}

Run.java

/**
 * @author: xianzhixianzhixian
 * @date: 2019-01-16 20:37
 */
public class Run {
    public static void main(String[] args) throws Exception {
        final ServiceHasWaiters serviceHasWaiters = new ServiceHasWaiters();
        Runnable runnableHasWaiters = new Runnable() {
            @Override
            public void run() {
                serviceHasWaiters.waitMethod();
            }
        };
        Thread[] threadArray = new Thread[10];
        for (int i = 0; i < 10; i++) {
            threadArray[i] = new Thread(runnableHasWaiters);
        }
        for (int i = 0; i < 10; i++) {
            threadArray[i].start();
            serviceHasWaiters.notifyMethod();
        }
        Thread.sleep(2000);
        serviceHasWaiters.notifyMethod();
    }
}

运行结果:因为线程在start之后有可能会被立即唤醒,所以结果中出现了为0为1的情况,这也证实了lock.hasWaiters(Condition condition)统计的是是否有处于wait状态的线程。

 

 

 

 

写文章

热门文章

  • IDEA 导入maven项目在Select Maven projects to import界面无选项 22915
  • Java递归解析任意层的Json数据,获取所有的key和value, 20396
  • redis集群部署一直卡在Waiting for the cluster to join ...... 16220
  • maven聚合项目项目间依赖时,出现错误的解决办法 13817
  • Java多线程问题--方法isFair()、isHeldByCurrentThread()和isLocked()的用法和区别 11638

分类专栏

  • Redis 35篇
  • Java 42篇
  • Maven 7篇
  • linux 23篇
  • git 1篇
  • 数据库 2篇
  • Python 1篇
  • 前端
  • C语言 3篇
  • 算法 3篇
  • 多线程 29篇

最新评论

  • Java多线程问题--方法isFair()、isHeldByCurrentThread()和isLocked()的用法和区别

    最闲程序员: 请教下,“lock.isLocked()是指这个lock是否被任意线程持有”,这里的任意线程可以包含当前线程吗?

  • IDEA 导入maven项目在Select Maven projects to import界面无选项

    liu7132: 太爱感谢了 贴贴

  • redis集群部署一直卡在Waiting for the cluster to join ......

    m0_60619795: 牛牛牛,感谢大佬

  • redis集群部署一直卡在Waiting for the cluster to join ......

    杨心雨: 现在不需要ruby脚本了

  • redis集群部署一直卡在Waiting for the cluster to join ......

    杨心雨: 牛,这个方法一下子就成功了

大家在看

  • Leetcode 每日一题:Diameter of Binary Tree

最新文章

  • Redis深度历险-Redis基数树内部源码结构
  • Redis深度历险-Redis紧凑列表内部源码结构
  • Redis深度历险-Redis跳跃列表内部源码结构
2020年37篇
2019年17篇
2018年35篇
2017年18篇
2016年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢葡萄雕塑图片浙江人物玻璃钢雕塑销售厂家玉溪市玻璃钢雕塑设计价格表时尚的玻璃钢雕塑零售玻璃钢动物雕塑设计玻璃钢雕塑费用火烈鸟商场美陈福建商业商场美陈市场报价环保玻璃钢雕塑价格定制玻璃钢天猫雕塑东莞玻璃钢卡通人物雕塑沈阳哪里有卖玻璃钢雕塑的环保玻璃钢雕塑方法东莞玻璃钢雕塑制品商场店庆美陈装饰图片温州商场美陈厂家供应清远玻璃钢雕塑供应商家开封玻璃钢雕塑小品制作深圳大型商场美陈市场报价句容商场圣诞美陈清远玻璃钢厨师人物雕塑北京石雕雕塑玻璃钢滁州卡通玻璃钢雕塑多少钱玻璃钢仿铜人物雕塑品牌定西人物玻璃钢雕塑哪家好北京户外商场美陈市场报价玻璃钢熊出没雕塑图片东阳广场玻璃钢雕塑发光宇航员玻璃钢雕塑玻璃钢雕塑施工规范香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化