`

通过semaphore信号灯,开启多个线程,但只并发3个线程

 
阅读更多

 

package com.mhm.test1;

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


/**
 * semaphore 信号灯
 * 20个线程,开启3个信号灯,一个线程拿走一个灯,也就是说,同时只能有3个线程并发
 * 一盏灯类似互斥sync
 * @author Administrator
 *
 */
public class SemaphoreTest {
	public static void main(String[] args) {
		ExecutorService es = Executors.newCachedThreadPool();
		
		final Semaphore sp = new Semaphore(3);
		
		for (int i = 0; i < 20; i++) {
			Runnable r = new Runnable() {
				@Override
				public void run() {
					try {
						sp.acquire();
						System.out.println("进入" + Thread.currentThread().getName() + " 当前有" + (3 - sp.availablePermits()) + "线程并行");
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
					try {
						Thread.sleep((long)Math.random() * 10000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
					System.out.println("【即将离开】" + Thread.currentThread().getName() + " 当前有" + (3 - sp.availablePermits()) + "线程并行");
					
					sp.release();
					
					System.out.println("【离开】" + Thread.currentThread().getName() + " 当前有" + (3 - sp.availablePermits()) + "线程并行");
				}
			};
			
			es.execute(r);
		}
		
		es.shutdown();
	}
}

 

 

分享到:
评论

相关推荐

    使用信号量(Semaphore)实现线程的同步

    使用信号量(Semaphore)实现线程的同步

    C#语言Semaphore类用法实例(多线程多端口使用端口控制)

    C#语言Semaphore类用法实例,多线程 用于有多个同类型共享资源(比如端口)时,如何协调端口分配给线程访问资源的问题,是一个简单模拟实例(源代码)。

    semaphore控制多线程循序执行

    semaphore控制多线程循序执行,网上 找的例子更改的希望对大家有用

    java并发之Semaphore信号量.md

    Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...

    多线程(C++)同步Semaphore

    多线程(C++)同步Semaphore

    多线程代码 经典线程同步互斥问题 生产者消费者问题

    a: 创建一个线程 b: 创建多个线程 c: 多线程访问同一资源 d: 经典线程同步互斥问题 e: 使用关键段解决子线程互斥问题 f: 利用事件实现线程同步问题 ...I: 信号量 semaphore 解决线程同步问题

    92道Java多线程与并发面试题含答案(很全)

    一个进程可以有一个或多个线程,每个线程都执行其自己的任务。 进程(Process):进程是操作系统分配资源(如内存)和调度的单位。一个进程可以包含多个线程,这些线程共享进程的资源。 并发与并行:并发是指多个...

    【2018最新最详细】并发多线程教程

    【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...

    Java多线程之并发工具类

     3)Semaphore(信号量:控制并发进程数)  主要参考资料:java并发编程的艺术、Java并发——同步工具类  二、CountDownLatch(同步倒数计数器)–不仅仅用于多线程  1.作用:允许一个或多个线程等待其他线程...

    python线程信号量semaphore使用解析

    多线程同时运行,能提高程序的运行效率,但是并非线程越多越好,而semaphore信号量可以通过内置计数器来控制同时运行线程的数量,启动线程(消耗信号量)内置计数器会自动减一,线程结束(释放信号量)内置计数器会自动...

    JAVA高质量并发详解,多线程并发深入讲解

    本书全面解析了Java并发编程的核心概念、原理和实践,帮助读者深入理解多线程并发编程的精髓,提升编程能力和系统性能。 书中首先介绍了并发编程的基础知识,包括线程的基本概念、线程的生命周期、线程安全等问题。...

    Delphi多线程之Semaphore_(信号对象).pdf

    Delphi多线程之Semaphore_(信号对象).pdf

    2023年最新Java高并发多线程面试题

    内容概要:最新2023年Java高并发多线程后端面试题整理, 包含线程池,并发集合,volatile,CountDownLatch,Semaphore,Phaser,AQS,ReentrantLock,ReentrantLock等等问题, 用简洁明了的语言,通俗易懂地阐述了高...

    java线程并发semaphore类示例

    Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证

    多线程编程——信号量使用(Jack_semaphore_test.rar)

    多线程编程:信号量使用。 打包文件包含两个文件:c文件源代码、Makefile文件,运行环境在Ubuntu14.04下,使用自带的gcc编译器,同学们只需将文件夹复制到某一目录下之后在终端执行:1.“make”生成“test”可执行...

    Linux下多线程编程-Pthread与Semaphore的使用.doc

    Linux下多线程编程-Pthread与Semaphore的使用.doc

    JAVA多线程--信号量(Semaphore)_.docx

    JAVA多线程--信号量(Semaphore)_.docx

    Python多线程同步Lock、RLock、Semaphore、Event实例

    一、多线程同步 ...Event : 是最简单的线程间通信的方式,一个线程可以发送信号,其他的线程接收到信号后执行操作。  二、实例 1)Lock & RLock Lock对象的状态可以为locked和unlocked 使用acquire()设置

    NET多线程同步方法详解

    .NET多线程同步方法详解(一):自由锁(InterLocked) 本文主要描述在C#中线程同步的方法。...这种方法比较简单,当你在第一个线程运行时想等待第二个线程执行结果,那么你可以让第二个线程Join进来就可以了。

    C#线程锁介绍源码

    EventWaitHandle 类允许线程通过发信号互相通信。 通常,一个或多个线程在 EventWaitHandle 上阻止,直到一个未阻止的线程调用 Set 方法,以释放一个或多个被阻止的线程。 2.什么时候需要锁定 首先要理解锁定是...

Global site tag (gtag.js) - Google Analytics