java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java的Semaphore信号量

Java并发编程之Semaphore详解

作者:_Romeo

这篇文章主要介绍了Java并发编程之concurrent包中的Semaphore详解,信号量Semaphore一般用来表示可用资源的个数,相当于一个计数器,可类比生活中停车场牌子上面显示的停车场剩余车位数量,需要的朋友可以参考下

概念

默认构造方法

 public Semaphore(int permits){}

信号量:permits

重要方法

//申请资源,计数器值=0,则阻塞
public void acquire() throws InterruptedException {}
//释放资源
public void release() {}

1、类Semaphore的构造函数permits 是许可的意思,代表同一时间,最多允许permits执行acquire() 和release() 之间的代码。

例如:

Semaphore semaphore = new Semaphore(1);

例如:

Semaphore semaphore = new Semaphore(1,false);

测试使用

import java.util.concurrent.Semaphore;
public class Test {
    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(3);
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                try {
                    System.out.println("准备申请资源");
                    semaphore.acquire();
                    System.out.println("申请资源成功");
                    // 申请到资源之后休眠1秒
                    Thread.sleep(1000);
                    semaphore.release();
                    // 释放资源
                    System.out.println("释放资源完毕");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        // 创建15个线程,让这 15 个线程来分别去尝试申请资源
        for (int i = 0; i < 15; i++) {
            Thread t = new Thread(runnable);
            t.start();
        }
    }
}

运行结果如下:

在这里插入图片描述

可以看到,由于资源数为3,所以前3个线程申请资源后很容易成功,而之后的线程就没有资源可以申请了,只能等到前3个线程把资源释放出来后再申请

信号量相当于是锁的升级版本,锁只能控制一个资源的有无,而信号量可以控制很多个资源的有无

到此这篇关于Java并发编程之concurrent包中的Semaphore详解的文章就介绍到这了,更多相关Java的Semaphore信号量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文