Semaphore

作者: zzj0990 | 来源:发表于2021-01-06 00:06 被阅读0次

    信号量,最多可以有多少线程去执行。
    使用的场景:限流
    例如:卖票窗口,收费高速口等

    public class T11_TestSemaphore {
        public static void main(String[] args) {
            // Semaphore s = new Semaphore(2);
            Semaphore s = new Semaphore(2, true); // 默认第二个参数为true,内部用队列实现
            // 允许一个线程同时执行
            // Semaphore s = new Semaphore(1);
    
            new Thread(()->{
                try {
                    s.acquire(); // 谁抢占到该信号量 谁就可以执行
    
                    System.out.println("T1 running...");
                    Thread.sleep(200);
                    System.out.println("T1 running...");
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    s.release(); // 释放信号量
                }
            }).start();
    
            new Thread(()->{
                try {
                    s.acquire();
    
                    System.out.println("T2 running...");
                    Thread.sleep(200);
                    System.out.println("T2 running...");
    
                    s.release();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
    执行结果:
    T1 running...
    T1 running...
    T2 running...
    T2 running...
    
    Process finished with exit code 0
    

    相关文章

      网友评论

          本文标题:Semaphore

          本文链接:https://www.haomeiwen.com/subject/fawjoktx.html