zoukankan      html  css  js  c++  java
  • java基础----Semaphore

      在java中,synchornized和reentrantLock大家肯定很熟悉,但是有些场景,我们一个线程可能需要同时争夺多个资源,这个时候,Semaphore就可以满足这种需求,并且做到限流的效果。

    import java.util.Random;
    import java.util.concurrent.Semaphore;
    import java.util.concurrent.TimeUnit;
    
    public class SemaphoneDemo {
        public static void main(String[] args) {
            Semaphore semaphore = new Semaphore(3);
            Random rd = new Random();
    
            for(int i = 0; i < 6; i++)
            {
                new Thread(()->{
                    try {
                        semaphore.acquire();
                        System.out.println(Thread.currentThread().getName() + "获得锁");
                        TimeUnit.SECONDS.sleep(rd.nextInt(10));
                        System.out.println(Thread.currentThread().getName() + "释放锁");
                        semaphore.release();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                },"t"+i).start();
            }
        }
    }

      上述代码中,多个线程会同时争夺大小为3的Semaphore锁资源,而当超过3个线程争夺到Semaphore的锁资源,其他线程只能阻塞等待,直到有线程释放资源为止。

  • 相关阅读:
    &与&&的区别
    x^y=(x&~y)|(~x&y)证明
    a、b交换与比较
    x+y = ((x&y)<<1) + (x^y) 证明
    (x&y) + ((x^y)>>1)即x和y的算数平均值
    默认参数提升
    类型转换
    闲扯原码,补码和反码(转)
    C/C++中float和double的存储结构
    led设备驱动(s3c_led.c)
  • 原文地址:https://www.cnblogs.com/QicongLiang/p/13652975.html
Copyright © 2011-2022 走看看