`

多线程并发Semaphore应用

    博客分类:
  • java
阅读更多

/*
单个信号量的Semaphonre对象可以实现互斥锁的功能,
并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”
这可应用于死锁恢复的一些场合。  */

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SemaphoreTest {
   public static void main(String[] args) {
      ExecutorService service = Executors.newCachedThreadPool();
      final  Semaphore sp = new Semaphore(3);      //只允许3个线程,
      for(int i=0;i<10;i++){ //10个任务
        Runnable runnable = new Runnable(){
              public void run(){
              try{
                 sp.acquire();  //阻塞
              } catch (InterruptedException e1) {
                 e1.printStackTrace();
              }
              System.out.println("线程" + Thread.currentThread().getName() +
                    "进入,当前已有" + (3-sp.availablePermits()) + "个并发");
              try{
                 Thread.sleep((long)(Math.random()*10000));
              }catch (InterruptedException e) {
                 e.printStackTrace();
              }
              System.out.println("线程" + Thread.currentThread().getName() +
                    "即将离开");             
              sp.release(); //释放
              //下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元
              System.out.println("线程" + Thread.currentThread().getName() +
              "已离开,当前已有" + (3-sp.availablePermits()) + "个并发");             
           }
        };
        service.execute(runnable);       
      }
   }
}


分享到:
评论

相关推荐

    Java 模拟线程并发

    最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...

    java线程并发semaphore类示例

    在Java多线程编程中,线程的并发控制是非常关键的一部分,它确保多个线程能够协同工作并有效地访问共享资源。Java 5.0引入了四个新的同步工具类,它们是Semaphore、CountDownLatch、CyclicBarrier和Exchanger,用于...

    多线程 高并发

    这里,我们主要探讨的是如何通过编写多线程并发程序来优化应用程序的性能,提高系统的处理能力。 首先,多线程是指在一个进程中同时执行多个线程。线程是操作系统调度的基本单位,它允许程序同时执行多个任务。多...

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

    Delphi 多线程之 Semaphore (信号对象) Delphi 多线程中,Semaphore (信号对象) 是一种高效的同步方法,用于控制多线程之间的访问顺序。...Semaphore 是一种高效的多线程同步方法,广泛应用于多种多线程场景中。

    Java_多线程与并发编程总结.doc

    总之,Java的多线程和并发编程是一个复杂而重要的主题,它涉及到操作系统原理、JVM行为、线程管理、同步机制等多个方面,熟练掌握这些知识对于开发高效、可靠的Java应用程序至关重要。通过理解线程的工作原理和使用...

    多线程,高并发.zip

    在IT领域,多线程和高并发是两个关键概念,特别是在Java编程中,它们对于构建高效、可扩展的系统至关...通过合理利用Java提供的多线程机制和并发工具,可以设计出高性能、可扩展的应用,满足大规模用户并发访问的需求。

    多线程并发执行任务

    在IT领域,多线程并发执行任务是一种常见的优化策略,特别是在服务器端开发、实时系统以及高性能计算中。本文将深入探讨多线程并发执行任务的相关知识点,并基于提供的`MyThread.java`文件,来分析和理解如何在Java...

    多线程并发的demo

    在现代计算机系统中,尤其是在服务器端的应用,如Web项目,多线程并发能够充分利用多核处理器的资源,实现任务并行处理,提高响应速度和服务质量。"多线程并发的demo"这个标题暗示我们将探讨如何在实际应用中实现这...

    c#IPCO多线程并发业务处理

    "c# IPCO多线程并发业务处理"这个DEMO是基于C#的网络编程,特别是在Socket通信和并发处理方面的一个实例。IPCO(可能是"Inter-Process Communication Object"的缩写)在这里可能是指进程间通信对象,它在多线程环境...

    操作系统课设 多线程并发执行 C# WPF

    在单处理器系统中,多线程允许应用程序同时执行多个任务,通过时间片轮转的方式在不同线程间切换,给用户带来并行处理的错觉。在C#中,`System.Threading`命名空间提供了对线程的支持,可以创建和管理线程。例如,...

    java多线程并发编程 核心技术应用实践

    在《java多线程并发编程核心技术应用实践》中,我们将深入探讨Java平台上的并发机制、线程安全与同步控制、线程池以及实战技巧。 首先,我们需要理解Java中的线程基础。线程是程序执行的最小单位,一个进程可以有多...

    java多线程并发实战和源码

    Java多线程并发实战与源码分析是Java开发中至关重要的一部分,它涉及到程序性能优化、系统资源高效利用以及复杂逻辑的正确同步。本书主要聚焦于Java多线程的基础理论和实际应用,虽然书中实例和源码相对较少,但仍然...

    C#多线程开发之并发编程经典实例.zip

    在C#编程中,多线程是一个至关重要的概念,尤其对于开发高性能、高并发的应用程序而言。本资源“C#多线程开发之并发编程经典实例”提供了丰富的实例,旨在帮助C#开发者深入理解并掌握多线程技术。以下是关于C#多线程...

    张孝祥Java多线程与并发库高级应用笔记

    ### 张孝祥Java多线程与并发库高级应用笔记概览 #### 一、Java多线程技术的重要性与挑战 Java线程技术是软件工程领域不可或缺的一部分,尤其在底层编程、Android应用开发以及游戏开发中,其重要性不言而喻。然而,...

    semaphore控制多线程循序执行

    通过合理使用Semaphore,我们可以有效地避免资源竞争,提高程序的并发性能,并确保多线程环境下的数据一致性。 总之,Semaphore是一种强大的同步工具,能够帮助我们在多线程环境中实现复杂的数据访问控制策略。理解...

    多线程并发处理

    在计算机科学中,多线程并发处理是一种编程技术,它允许多个线程在同一时间执行,从而提升程序的效率和响应速度。特别是在现代处理器架构中,多线程并发处理是利用多核处理器资源的关键手段。以下是对给定文件中可能...

    多线程操作串口示例(带modbus

    总的来说,"多线程操作串口示例(带Modbus)"这个主题涵盖了并发编程、串口通信和工业通信协议等多个IT领域的知识点,对于从事相关开发的工程师来说,这是一个宝贵的参考资料。通过学习和理解这个示例,我们可以更好...

    Java多线程并发机制的应用探讨.zip

    本文将深入探讨Java多线程并发机制的应用及其相关知识点。 首先,我们要理解Java中线程的基本概念。线程是操作系统分配CPU时间片的基本单位,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈和一部分堆内存。...

    Java多线程与并发库高级应用

    ### Java多线程与并发库高级应用 #### 一、Java多线程基础 在深入探讨Java多线程与并发库的高级应用之前,我们首先需要回顾一下Java多线程的基础概念和技术要点。 ##### 1.1 线程的概念 在计算机科学中,线程是...

    java多线程查询数据库

    多线程并发查询允许我们将一个大任务分解为多个小任务,每个任务在不同的线程上独立运行,从而提高查询效率。在数据库查询中,这通常适用于处理分页数据或执行并行查询。 ### 2. 线程池 Java中的线程池是通过`java....

Global site tag (gtag.js) - Google Analytics