Java 信号量代码演练

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 信号量代码演练相关的知识,希望对你有一定的参考价值。

文章目录

信号量

信号量为多线程协作提供了更为强大的控制方法。信号量是对锁的扩展。锁一次都只允许一个线程访问一个资源,而信号量却可以指定多个线程,同时访问某一个资源。

代码案例

例如:过收费站的案例,收费站入口是共享资源,每辆车好比是一个线程,看门人是信号量。

一共有5个检查口,所以这个资源内只能同时有五个车在过

package com.yyl;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

//信号量
class SemapDemo implements Runnable 
    // 创建信号量对象,只能5个线程同时访问
    Semaphore semp = new Semaphore(5);

    @Override
    public void run() 
        try 
            semp.acquire();
            // 获取许可
            Thread.sleep(5000);
            System.out.println(Thread.currentThread().getName() + ",完成");
            // 访问完 释放 如果把下面语句注释掉 ,控制台只能打印5条数据,就一直阻塞
            semp.release();
         catch (InterruptedException e) 
            e.printStackTrace();
        
    

    public static void main(String[] args) 
        SemapDemo semapDemo = new SemapDemo();
        //创建固定数目线程的线程池
        ExecutorService es = Executors.newFixedThreadPool(20);
        // 模拟20个客户端访问
        for (int i = 0; i < 20; i++) 
            es.execute(semapDemo); //执行任务
        
        //退出线程池
        es.shutdown();
    



一次只能运行5个,结果如下 :

以上是关于Java 信号量代码演练的主要内容,如果未能解决你的问题,请参考以下文章

《FPGA全程进阶---实战演练》第五章 基于74HC595的LED操作

Oracle数据库如何收费

Java并发编程--5.信号量和障碍器

java并发编程[持续更新]

《FPGA全程进阶---实战演练》第七章 让按键恢复平静

JAVA基于MVC架构Java技术荟萃案例演练