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 信号量代码演练的主要内容,如果未能解决你的问题,请参考以下文章