java semaphore实现信号灯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/axuanqq/article/details/81841076

java semaphore实现信号灯

semaphore可以维护当前访问自身的线程个数,并提供了相应的同步机。使用semaphore可以控制同时访问资源的线程个数.

例如:实现一个文件允许的并发访问数.

       semaphore实现的功能就类似测试所有的5个坑,假如有是个人要上测试,那么统发能有多少个人去上测试呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中等待的的另外5个人又可以占用了.

      另外等待的5个人中可以随机获取优先机会,也可以是按照先来后到的顺序获取机会,这取决于狗爪semaphore对象传入的参数选项

    单个信号量的semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁:

实例:

public static void main(String[] args) {
        final int permits = 3;
        Semaphore semaphore = new Semaphore(permits);
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        semaphore.acquire();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(String.format("当前已有%s个线程并发",(permits-semaphore.availablePermits())));
                    semaphore.release();
                }
            }).start();
        }
    }

运行结果:
当前已有2个线程并发
当前已有1个线程并发
当前已有3个线程并发
当前已有2个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发

猜你喜欢

转载自blog.csdn.net/axuanqq/article/details/81841076