`

multi-thread(八)Semaphore

 
阅读更多

Semaphore.acquire():Acquires a permit from this semaphore, blocking until one is available

Executors.newFixedThreadPool( 2 )作用相似

CyclicBarrier.await(): Waits until all parties have invoked await on this barrier. 

CountDownLatch.await(): Causes the current thread to wait until the latch has counted down to zero

 

 

 

/**
 * @author timeriver.wang
 * @date 2014-03-10 2:02:52 PM
 */
public class SemaphoreTest {
    public static void main( String[] args ) {
        ExecutorService service = Executors.newCachedThreadPool();
        final Semaphore sp = new Semaphore( 3 );
        for ( int i = 0; i < 9; i++ ) {
            Runnable runnable = new Runnable() {
                public void run() {
                    try {
                        sp.acquire();
                    }
                    catch ( InterruptedException e1 ) {
                        e1.printStackTrace();
                    }
                    System.out.println( Thread.currentThread() + "进入,当前已有" + ( 3 - sp.availablePermits() ) + "个并发" );
                    try {
                        Thread.sleep( (long) ( Math.random() * 10000 ) );
                    }
                    catch ( InterruptedException e ) {
                        e.printStackTrace();
                    }
                    System.out.println( Thread.currentThread() + "即将离开" );
                    sp.release();
                    // 下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元
                    System.out.println( Thread.currentThread() + "已离开,当前已有" + ( 3 - sp.availablePermits() ) + "个并发" );
                }
            };
            service.execute( runnable );
        }
    }

}

 

 

分享到:
评论

相关推荐

    multi-thread-com-comunication.rar_VC6.0多线程_串口 thread

    VC6.0是微软的老款集成开发环境,支持C++编程,可以利用Windows API中的CreateThread函数或者C++标准库中的std::thread来创建线程。多线程的优点在于能够提高程序的执行效率,使得程序在等待某一任务完成时,其他...

    vc6.0Multi-Thread.zip_vc6 线程_多线程暂停_线程暂停_线程间 通信

    3. 信号量:Semaphore对象可以限制对特定资源的并发访问数量。 4. 互斥量(Mutex):保证同一时间只有一个线程能访问资源。 5. 条件变量:用于线程等待特定条件满足后再继续执行。 在压缩包文件"vc6.0多线程编程...

    thread源码java-java-multi-thread-programming:java多线程编程核心技术

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升软件的效率和响应...在实际项目中,结合Java的开源库,如`java-multi-thread-programming-master`,可以进一步提升我们的多线程编程能力。

    Java实现多线程下载源代码

    Java提供了多种创建线程的方式,如继承Thread类或实现Runnable接口,然后通过调用start()方法启动线程。 在描述中提到的NetBeans是一个流行的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能,包括代码...

    multi-process procedures,多进程,VC

    在Windows开发环境中,多进程(Multi-Process)是一种编程模型,它允许同时运行多个独立的程序实例,每个实例都有自己的内存空间和系统资源。在本文中,我们将深入探讨多进程的概念,以及如何在Visual C++(简称VC)...

    linux-thread.rar_linux multi thread_linux thread_thread_thread l

    3. **线程同步**:为了防止多个线程同时访问共享资源,需要使用线程同步机制,如互斥量(mutex)、信号量(semaphore)和条件变量(condition variable)。`pthread_mutex_lock()`和`pthread_mutex_unlock()`用于...

    java-multi-thread:《 Java多线程编程核心技术》源代码-java source code

    - `Semaphore`:信号量,控制同时访问特定资源的线程数量。 - `CyclicBarrier` 和 `CountDownLatch`:协调多个线程间的同步。 3. **线程通信**: - `wait()`, `notify()`, `notifyAll()`:在 `synchronized` 块...

    VC++ MultiThread 例程

    3. **信号量(Semaphore)**:`Semaphore`允许指定数量的线程同时访问资源。`ThreadSemaphoreTest`可能包含了如何设置最大并发数并控制线程访问的例子。 4. **消息队列(Message Passing)**:`ThreadMsgTest`可能是一...

    nimbo-java-multi-threading:Java多线程演示代码

    - **Semaphore信号量**:控制同时访问特定资源的线程数量。 - **CyclicBarrier和CountDownLatch**:协调多个线程间的同步,前者允许所有线程等待彼此到达某个点,后者允许一个或多个线程等待计数器归零。 4. **...

    Multi-Threaded-Restaurant

    在Java中,可以通过两种方式创建线程:继承Thread类或实现Runnable接口。在这个项目中,每个角色(如食客、厨师)可能都代表一个独立的线程,每个线程负责特定的任务,例如食客下单、厨师烹饪、烤箱烘烤食物等。这种...

    Linux_Multi_Thread总结1

    在Linux系统中,多线程(Multi-Thread)是一种编程技术,它允许程序同时执行多个独立的执行流,也就是我们所说的“线程”。这使得应用程序能够更高效地利用处理器资源,尤其是在多核或多处理器系统中。Linux内核自...

    Multi thread library for Delphi

    本文将围绕“Multi thread library for Delphi”这一主题,深入探讨其设计理念、使用方法及其实现细节。 首先,多线程库在Delphi中的应用主要是为了实现程序的并行执行,提高资源利用率,尤其是对于CPU密集型任务和...

    multi thread new

    "multi thread new" 可能指的是在Java或者C++等编程语言中创建新线程的方法。在现代计算环境中,多线程使得程序能够同时执行多个任务,从而提高了处理器的利用率和程序的响应速度。 一、多线程基础 1. **线程定义*...

    Windows_multi_thread_programming

    Windows API中的CreateThreadpool和SetThreadpoolCallbackPool函数可以用来创建和管理线程池,提高系统效率并减少资源消耗。 七、线程安全与异常处理 在多线程编程中,需要注意线程安全,即在多线程环境下正确地...

    pb multi thread

    在本案例中,我们聚焦于"pb multi thread",即PowerBuilder 11.5中的多线程应用示例。 在PowerBuilder 11.5中,开发者可以利用多线程来提升应用程序的执行效率,特别是在处理大量数据或执行长时间运行的任务时。多...

    java basic, such as multi thread, functional programming

    在“java basic, such as multi thread, functional programming”这个主题中,我们将深入探讨Java中的多线程和函数式编程两个重要概念。 首先,让我们来了解多线程。在Java中,多线程允许程序同时执行多个任务,极...

    VB 多线程模块案例

    在文件名列表中提到的"multi-Thread"可能是案例的主程序或者包含线程示例的文件夹。在这个文件中,你可能会找到如何创建、启动、停止线程,以及如何处理线程异常、线程优先级设置、线程池使用等相关代码示例。 总之...

    C# 多线程源码实例

    C#提供了多种同步机制,如`Monitor`类、`Mutex`、`Semaphore`和`lock`关键字,确保对共享数据的安全访问。 4. **线程池**: C#中的`ThreadPool`类是一种高效线程管理机制,用于复用已存在的线程,而不是每次需要时都...

    Java线程编程学习笔记(二)

    首先,标题中的“Java线程编程学习笔记(二)”表明这是系列教程的第二部分,暗示了前一部分可能已经介绍了线程的基础概念,如如何创建线程(通过实现Runnable接口或继承Thread类)、线程的状态(新建、就绪、运行、...

    VC_THREAD.zip_VC 线程_VC_THREAD.zip _thread vc_vc 多线程_多线程例子

    为避免这种情况,需要使用同步机制,如互斥量(mutex)、信号量(semaphore)、事件对象(event)或临界区(critical section)。 2. **线程局部存储**:每个线程都有自己的栈空间,可以使用`thread_local`关键字...

Global site tag (gtag.js) - Google Analytics