`

semaphore简单实例

阅读更多

semaphore是java里边的信号灯,感觉很像blockqueue,嗯

 

package com.mutiple;

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

public class TestSemaphore {
	
	public static void main(String[] args) {
		ExecutorService exec = Executors.newCachedThreadPool();
		
		final Semaphore semp = new Semaphore(5);
		
		for (int i = 0; i < 20; i++) {
			final int no = i;
			Runnable run = new Runnable() {
				
				@Override
				public void run() {
					try {
						semp.acquire();
						System.out.println("Accessing: "+no);
						long time = (long) (Math.random()*10000);
						System.out.println(time);
						Thread.sleep(time);
						semp.release();
						System.out.println("---------------"+semp.availablePermits());
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			};
			exec.execute(run);
		}
		
		exec.shutdown();
	}

}

 

 

 

分享到:
评论

相关推荐

    mutex和semaphore互斥程序实例

    `mutex`(互斥锁)和`semaphore`(信号量)都是用于实现线程同步和互斥的工具,确保同一时间只有一个线程可以访问特定的共享资源。本文将深入探讨这两种机制及其在实际编程中的应用。 一、互斥锁(Mutex) 互斥锁是...

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

    在这个例子中,我们创建了10个线程,但只有5个能够同时运行,因为Semaphore限制了并发访问的端口数量。线程在`WaitOne()`处阻塞,直到有足够的许可证可用。完成后,通过`Release()`归还许可证,允许其他线程继续执行...

    Swift-dispatch-semaphore

    以下是一个简单的示例,展示了如何在多个线程中使用`DispatchSemaphore`访问共享资源: ```swift let semaphore = DispatchSemaphore(value: 1) func downloadImage(url: URL) { semaphore.wait() // 下载图片 ...

    JAVA 多线程之信号量(Semaphore)实例详解

    **JAVA 多线程之信号量Semaphore实例详解** 在Java多线程编程中,信号量Semaphore是一种非常重要的同步工具,用于控制对公共资源的访问。Semaphore类位于`java.util.concurrent`包下,它允许我们限制同时访问特定...

    深入浅出java Semaphore.pdf

    在这个例子中,我们创建了40个线程来读取文件并存储数据,但由于数据库连接数只有10个,因此我们使用Semaphore限制最多只有10个线程同时进行数据库操作。这样,即使有大量线程并发读取文件,也不会超出数据库的处理...

    sem.rar_Semaphore

    在这个例子中,父子进程共享一个信号量,确保同一时间只有一个进程在执行。 **6. 注意事项** - 信号量应正确初始化和销毁,避免资源泄漏。 - 避免死锁:合理安排进程的执行顺序,防止出现无法解除的等待状态。 - ...

    Java多线程Semaphore工具的使用详解.rar

    下面是一个简单的例子,展示了Semaphore如何限制同时访问某资源的线程数量: ```java import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; public class SemaphoreExample { private ...

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

    当计数器为0时,其他试图获取Semaphore的线程将被阻塞,直到某个线程释放Semaphore。 4. **Event**: - Event是线程间最简单的通信方式,用于一个线程发送信号,其他线程接收并根据信号执行相应操作。 - Event...

    iOS GCD中级篇 - dispatch_semaphore(信号量)的理解及使用1

    以下是一个简单的例子,展示了如何使用信号量来控制同时执行的任务数量。在这个例子中,我们创建了一个信号量,初始值为2,然后启动了3个并发任务。每个任务在执行前都会调用`dispatch_semaphore_wait`获取信号量,...

    Visual C++信号量线程同步的简单实例工程

    本实例工程“Visual C++信号量线程同步的简单实例工程”聚焦于如何通过信号量(Semaphore)实现线程间的协调与同步,以确保资源的有效管理和避免竞态条件。 首先,我们需要理解什么是信号量。信号量是一种同步原语...

    Java线程的简单例子

    当一个类实现Runnable接口时,只需要重写run()方法,然后通过Thread类的构造函数传入Runnable实例来创建线程。另一种方式是直接继承Thread类,覆盖其run()方法,然后直接调用start()启动新线程。这两种方法中,实现...

    vxworks多任务(task和semaphore信号量及事件)例程.zip

    资源包含了vxworks多任务(task和semaphore信号量及事件)的相关编程例子,通过创建多任务的简单例子,帮助大家了解taskSpawn函数、信号量semaphore、以及事件event的使用方法。

    Semaphore RTU SCADA SNMP.pdf

    6. SNMP(简单网络管理协议)是为了解决这些现代工业遥控和网络设备异构性而发展起来的协议,用于远程监控和诊断这些设备。 通过以上的分析,可以看出文档涉及了多个层面的技术知识。首先,讨论了SCADA和RTU的基本...

    创建线程简单实例

    本文将深入探讨如何在C#环境中创建线程,通过一个简单的实例来帮助你理解线程的应用和实现。 C#中的线程主要通过`System.Threading`命名空间中的`Thread`类来创建和管理。首先,我们需要包含这个命名空间,以便可以...

    一个简单的线程同步实例

    在Java等编程语言中,线程同步可以通过多种方式实现,本实例将探讨其中的几种常见方法。 首先,我们来看最基本的同步机制——synchronized关键字。synchronized可以用于方法或者代码块,当它包裹的代码被执行时,会...

    linux 一个简单队列实例

    在这个“Linux一个简单队列实例”中,我们将探讨如何在Linux环境下实现一个基础的队列,并涵盖入队(enqueue)和出队(dequeue)这两个基本操作。 一、队列数据结构基础 队列的基本结构通常包括头部(front)和尾部...

    bt-semaphore:受SBCL信号量启发的波尔多线程的简单信号量类

    make-semaphore创建一个信号量实例 wait-on-semaphore阻塞,直到信号量可以递减(即其计数&gt; 0)或超时到期 signal-semaphore增加信号量并唤醒n个等待线程 try-semaphore递减信号量而不会阻塞 semaphore-count返回...

    python多线程semaphore实现线程数控制的示例

    以下是一个简单的Semaphore应用示例: ```python import threading import time class TestThread(threading.Thread): def __init__(self, i, sem): super(TestThread, self).__init__() self.i = i self.sem ...

    多线程技术简单实例.rar

    标题“多线程技术简单实例.rar”暗示了这是一个关于使用VC进行多线程编程的实际案例。这个压缩包包含了一个名为“如何建立多线程程序(MulThread).doc”的文档和一个名为“MulThread”的可能为源代码文件或可执行文件...

    Python semaphore evevt生产者消费者模型原理解析

    信号量帮助我们限制同时访问资源的线程数量,Event提供了一种简单有效的方式让线程之间进行状态同步,而Queue则是实现生产者-消费者模型的核心组件。这些工具和技术对于开发高性能、可扩展的应用程序至关重要。

Global site tag (gtag.js) - Google Analytics