Semaphore的使用规范

news/2024/7/8 4:40:14 标签: java, semaphore

初出茅庐的我写了如下的代码:

java">public class SemaphoreTest01 {
    private static Semaphore semaphore = new Semaphore(1);
    public static void main(String[] args) throws InterruptedException {
        semaphore.acquire();
        // do something...
        semaphore.release();
    }
}

程序测试正常,表面看也没有问题。使用信号量来控制程序对资源的获取。

但是生产上出现自动任务卡死的情况。

坑一:

多个线程访问此方法,某个线程在运行中异常,没有对信号量释放,另一个线程在获取信号量的时候就会一直等待,处于假死状态。模拟的示例如下:

java">public class SemaphoreTest02 {
    private static Semaphore semaphore = new Semaphore(1);
    
    public static void main(String[] args) throws InterruptedException {
        // one thread
        semaphore.acquire();

        // another thread
        semaphore.acquire();
        // do something...
        semaphore.release();
    }
}

解决方式:

java">semaphore.acquire();
try {
    System.out.println("I'm in...");
    // do something...
    Thread.sleep(100000000);
} finally {
    semaphore.release();
}

坑二:

如果业务逻辑比较耗时,同样会导致等待很久的情况。

尝试获取信号量:

java">    boolean flag = semaphore.tryAcquire(10, TimeUnit.SECONDS);
    if (flag) {
        try {
            System.out.println("I'm in...");
            // do something...
            Thread.sleep(100000);
        } finally {
            semaphore.release();
        }
    }


http://www.niftyadmin.cn/n/1721893.html

相关文章

python就是学库_如何系统学习python的各种库?

Python最为强大的就是第三方库,站在巨人的肩膀上,我们更容易更方便去做我们想要去做的事情。但是如何去学习Python的第三方库呢?第一点,先要打好基础,基础是你在以后的学习之中用得最多的东西,而且那些复杂…

快速全面入门Maven(一)--POM文件

目录写作原由Maven的安装(略)POM文件POM文件的分类POM文件的继承和重写POM文件的组件坐标(标识)几个简单的例子举例一、继承不如组合举例二、可选依赖举例三、排除依赖术语说明写作原由 说起Maven,它不是一个新的东西&…

发那科机器人xyz的方向_发那科机器人应用-坐标系介绍(1)

发那科机器人应用-坐标系介绍(1)坐标系简介坐标系是为了确定机器人位置姿态,而在空间上给予定义的位置指标坐标系有:工具,用户,世界,关节,手动关节坐标系是设定在机器人关节中的坐标系,关节坐标…

获取录音文件_【录音笔】京华数码DVR-610录音笔上手体验

前段时间,有朋友问我录音笔该怎么选,哪些录音笔值得推荐,自己日常也是用了非常多品牌的录音笔,所以就趁着这波热情,搞一手上手体验吧。利益相关:自费购买。(国庆假期没出门旅游,就在…

java中字节码_Java字节码介绍

对JVM内幕有一些概念之后,我们可以看一下从示例代码生成的一些基本的字节码示例。一个Java类文件中的每个方法都有一个由一系列指令组成的代码片段,每个指令都有如下的格式:操作符(1个字节) 操作数1(可选&a…

cad插件制作教程_AE教程!无插件制作液态异形文本动画!(含项目文件下载)...

如今,动态设计已经成为了一种趋势,那么,如何快速掌握设计技巧呢?本篇教程教你在不使用任何插件的情况下制作液态黏糊糊的有趣文本动画,快点码起来慢慢学习吧!教程效果图design sketch关键步骤提示Step tips…

Visual C#中实现窗体间的数据传递

代码:C#关键字:数据传递、窗体出自:http://developer.ccidnet.com/pub/disp/Article?columnID294&articleID34309&pageNO1摘要:本文我们将列举不同窗体间数据传递的四种情况,和用Visual C#实现这四…

yuv格式转换是那个组织定义的_PDF转换成图片,原来就这么简单!无需安装任何软件...

今天,同事王二急冲冲地跑来向我求救:客户那边说策划方案打不开,咋办咧?我跟他说别急,然后询问了一下来龙去脉。哦~原来这会客户在高铁上,只能用手机接收文件,恰巧手机没装PDF阅读器,…