网站首页 > 教程文章 正文
【死记硬背】
【概念】Semaphore即信号量,是一种计数器,用来保护一个或者多个共享资源的访问,它是并发编程的一种基础工具,用来控制同时访问的线程个数。
【原理】Semaphore实现临界区必须遵循三个步骤,首先,必须通过acquire()方法获得信号量;其次,使用共享资源执行必要的操作;最后,必须通过release()方法释放信号量。
Semaphore通过acquire()方法获取一个许可,如果没有就等待,而release()方法则释放一个许可。acquire()和release()是Semaphore的两个重要方法。
Semaphore的有参构造器Semaphore(int permits, boolean fair)提供了第二个传入参数,可以设置信号量是否为公平模式,如果传入的是false,那边就是非公平模式,如果传入的是true,则信号量是公平模式,默认是非公平模式。
【答案解析】
Semaphore的使用样例如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SemaphoreTest {
    public static void main(String[] args) {
        //线程池
        ExecutorService exec= Executors.newCachedThreadPool();
        //只能几个线程同时访问
        final Semaphore semph = new Semaphore(3);
        //模拟几个客户端访问
        for(int index=1;index<10;index++) {
            final int NO=index;
            Runnable ru = new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    try {
                        //获取许可
                        semph.acquire();
                        System.out.println("accessing:"+NO);
                        Thread.sleep((long)(Math.random()*1000));
                        //访问完后,释放
                        System.out.println("release:"+NO);
                        semph.release();
                    }catch (Exception e) {
                        // TODO: handle exception
                    }
                }
            };
            exec.execute(ru);
        }
        //退出线程池
        exec.shutdown();
    }
}【温馨提示】
点赞+收藏文章,关注我并私信回复【面试题解析】,即可100%免费领取楼主的所有面试题资料!
猜你喜欢
- 2024-12-26 进程间通信:共享内存和信号量的统一封装机制原理与实现
 - 2024-12-26 python基础篇:多线程的基本使用 python3.9多线程
 - 2024-12-26 介绍C#中的并发集合,并说明其在多线程编程中的作?
 - 2024-12-26 Hystrix系列之信号量、线程池 信号量 线程池
 - 2024-12-26 劳斯莱斯推出独一无二的Spectre Semaphore:车头泼墨,极致奢华
 - 2024-12-26 Linux信号量(1)-SYSTEM V Linux信号量做进程同步
 - 2024-12-26 什么是多线程同步?请列举多种多线程同步机制并?较它们的优缺点
 - 2024-12-26 2 万字长文详解 10 大多线程面试题|原力计划
 - 2024-12-26 进程间通信——POSIX 有名信号量与无名信号量
 - 2024-12-26 Python并发编程:使用信号量Semaphore实现资源有限的并发场景
 
- 最近发表
 
- 标签列表
 - 
- location.href (44)
 - document.ready (36)
 - git checkout -b (34)
 - 跃点数 (35)
 - 阿里云镜像地址 (33)
 - qt qmessagebox (36)
 - mybatis plus page (35)
 - vue @scroll (38)
 - 堆栈区别 (33)
 - 什么是容器 (33)
 - sha1 md5 (33)
 - navicat导出数据 (34)
 - 阿里云acp考试 (33)
 - 阿里云 nacos (34)
 - redhat官网下载镜像 (36)
 - srs服务器 (33)
 - pico开发者 (33)
 - https的端口号 (34)
 - vscode更改主题 (35)
 - 阿里云资源池 (34)
 - os.path.join (33)
 - redis aof rdb 区别 (33)
 - 302跳转 (33)
 - http method (35)
 - js array splice (33)
 
 
