java并发:并发控制机制之Semaphore

java并发:并发控制机制之Semaphore

一、初识Semaphore

小结:

A、可以将信号量可视化为一个计数器,它可以递增或递减。

B、从概念上讲,信号量维护了一个许可集合,Semaphore对可用的许可进行计数。

C、当计数器的值为0时,它能够使线程等待。

二、示例

The three steps you must follow when you use a semaphore to implement a critical section and protect the access to a shared resource:

  • First, you acquire the semaphore, with the acquire() method.
  • Then, you do the necessary operations with the shared resource.
  • Finally, release the semaphore with the release() method.

场景:

假设一个服务器资源有限,任意某一时刻只允许3个人同时访问,这时一共来了10个人

package com.test;

import java.util.concurrent.Semaphore;

public class SemaphoreDemo{
    
    public static void main(String args[]) throws Exception{
        
        final Semaphore semaphore = new Semaphore(3);//一次只允许3个人进行访问
        
        for(int i=0;i<10;i++) {
            final int no = i;

            Runnable thread = new Runnable() {
                public void run (){
                    try {
                        System.out.println("用户"+no+"连接上了:");
                        Thread.sleep(300L);
                        semaphore.acquire();//获取执行的许可
                        System.out.println("用户"+no+"开始访问后台程序...");
                        Thread.sleep(1000L);//模仿用户访问服务过程
                        semaphore.release();//释放,允许下一个线程访问后台
                        System.out.println("用户"+no+"访问结束。");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };

            new Thread(thread).start();
        }
        
        System.out.println("Main thread end!");
    }
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » java并发:并发控制机制之Semaphore