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)实现线程的同步
C#语言Semaphore类用法实例,多线程 用于有多个同类型共享资源(比如端口)时,如何协调端口分配给线程访问资源的问题,是一个简单模拟实例(源代码)。
semaphore控制多线程循序执行,网上 找的例子更改的希望对大家有用
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
多线程(C++)同步Semaphore
a: 创建一个线程 b: 创建多个线程 c: 多线程访问同一资源 d: 经典线程同步互斥问题 e: 使用关键段解决子线程互斥问题 f: 利用事件实现线程同步问题 ...I: 信号量 semaphore 解决线程同步问题
一个进程可以有一个或多个线程,每个线程都执行其自己的任务。 进程(Process):进程是操作系统分配资源(如内存)和调度的单位。一个进程可以包含多个线程,这些线程共享进程的资源。 并发与并行:并发是指多个...
【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...
3)Semaphore(信号量:控制并发进程数) 主要参考资料:java并发编程的艺术、Java并发——同步工具类 二、CountDownLatch(同步倒数计数器)–不仅仅用于多线程 1.作用:允许一个或多个线程等待其他线程...
多线程同时运行,能提高程序的运行效率,但是并非线程越多越好,而semaphore信号量可以通过内置计数器来控制同时运行线程的数量,启动线程(消耗信号量)内置计数器会自动减一,线程结束(释放信号量)内置计数器会自动...
本书全面解析了Java并发编程的核心概念、原理和实践,帮助读者深入理解多线程并发编程的精髓,提升编程能力和系统性能。 书中首先介绍了并发编程的基础知识,包括线程的基本概念、线程的生命周期、线程安全等问题。...
Delphi多线程之Semaphore_(信号对象).pdf
内容概要:最新2023年Java高并发多线程后端面试题整理, 包含线程池,并发集合,volatile,CountDownLatch,Semaphore,Phaser,AQS,ReentrantLock,ReentrantLock等等问题, 用简洁明了的语言,通俗易懂地阐述了高...
Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证
多线程编程:信号量使用。 打包文件包含两个文件:c文件源代码、Makefile文件,运行环境在Ubuntu14.04下,使用自带的gcc编译器,同学们只需将文件夹复制到某一目录下之后在终端执行:1.“make”生成“test”可执行...
Linux下多线程编程-Pthread与Semaphore的使用.doc
JAVA多线程--信号量(Semaphore)_.docx
一、多线程同步 ...Event : 是最简单的线程间通信的方式,一个线程可以发送信号,其他的线程接收到信号后执行操作。 二、实例 1)Lock & RLock Lock对象的状态可以为locked和unlocked 使用acquire()设置
.NET多线程同步方法详解(一):自由锁(InterLocked) 本文主要描述在C#中线程同步的方法。...这种方法比较简单,当你在第一个线程运行时想等待第二个线程执行结果,那么你可以让第二个线程Join进来就可以了。
EventWaitHandle 类允许线程通过发信号互相通信。 通常,一个或多个线程在 EventWaitHandle 上阻止,直到一个未阻止的线程调用 Set 方法,以释放一个或多个被阻止的线程。 2.什么时候需要锁定 首先要理解锁定是...