- 浏览: 254569 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
import java.util.ArrayList; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是: * Semaphore, CountDownLatch, CyclicBarrier和Exchanger. * 本例主要介绍Semaphore。 * Semaphore是用来管理一个资源池的工具,可以看成是个通行证, * 线程要想从资源池拿到资源必须先拿到通行证, * 如果线程暂时拿不到通行证,线程就会被阻断进入等待状态。 */ public class SemaphoreTest { /** * 模拟资源池的类 * 只为池发放2个通行证,即同时只允许2个线程获得池中的资源。 */ public static class Pool { // 保存资源池中的资源 ArrayList<String> pool = null; // 通行证 Semaphore pass = null; Lock lock = new ReentrantLock(); public Pool(int size) { // 初始化资源池 pool = new ArrayList<String>(); for (int i = 0; i < size; i++) { pool.add("Resource " + i); } // 发放2个通行证 pass = new Semaphore(2); } public String get() throws InterruptedException { // 获取通行证,只有得到通行证后才能得到资源 System.out.println("Try to get a pass..."); pass.acquire(); System.out.println("Got a pass"); return getResource(); } public void put(String resource) { // 归还通行证,并归还资源 System.out.println("Released a pass"); pass.release(); releaseResource(resource); } private String getResource() { lock.lock(); String result = pool.remove(0); System.out.println("资源 " + result + " 被取走"); lock.unlock(); return result; } private void releaseResource(String resource) { lock.lock(); System.out.println("资源 " + resource + " 被归还"); pool.add(resource); lock.unlock(); } } public static void testPool() { // 准备10个资源的资源池 final Pool aPool = new Pool(10); Runnable worker = new Runnable() { public void run() { String resource = null; try { //取得resource resource = aPool.get(); //用resource做工作 System.out.println("I am working on " + resource); Thread.sleep(500); System.out.println("I finished on " + resource); } catch (InterruptedException ex) { } //归还resource aPool.put(resource); } }; // 启动5个任务 ExecutorService service = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { service.submit(worker); } service.shutdown(); } public static void main(String[] args) { SemaphoreTest.testPool(); } }
发表评论
-
Java通过Executors提供四种线程池
2017-09-27 10:21 446Java通过Executors提供四种线程池,分别为: new ... -
并发线程组件 Amino
2013-07-23 13:29 668Amino CBB (Concurrent Building ... -
ThreadLocal的介绍(利用变量副本实现多线程访问同一变量)
2013-07-17 14:20 774早在Java 1.2推出之时,Ja ... -
ThreadGroup其实比ExecutorService更好
2013-07-17 13:32 682用java做抓取的时候免不了要用到多线程的了,因为要同时抓取多 ... -
Java多线程同步器
2013-07-12 17:00 844CyclcBarrier 在实际应用中,有时候需要多个线程 ... -
Java Thread.interrupt 害人! 中断JAVA线程
2013-07-12 16:37 756程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难 ... -
Java多线程学习——Condition的使用
2013-07-12 14:36 797Condition 将 Object 监视器方法(wait、n ... -
java多线程设计wait
2013-07-12 14:30 669在Java中,这个机制的实 ... -
Monitor
2013-07-12 10:44 15081. 什么是Monitor? Monitor其实是一 ... -
处理 子线程的返回值
2013-07-08 14:19 828package com.jimmy.Thread.Conc ... -
ExecutorService的execute和submit方法
2013-07-05 17:21 950因为之前一直是用的exec ... -
Exchanger-兄弟线程的信息交换
2013-07-05 16:23 672如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使 ... -
lockInterruptibly 和lock的区别
2013-06-26 16:36 848lockInterruptibly 与 lock比较区别在于 ... -
慎重使用volatile关键字
2013-06-26 11:10 715volatile关键字相信了解Java多线程的读者都很清楚它的 ... -
对synchronized(this)的一些理解
2013-06-26 10:18 653一、当两个并发线程访问同一个对象object中的这个synch ... -
java中的lock和synchronized区别
2013-06-26 10:02 5681、ReentrantLock 拥有Synchronized相 ... -
线程sleep,join,yield的区别
2013-06-21 17:37 4851.sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
初学Java多线程:慎重使用volatile关键字
2013-02-25 15:18 671学习Java多线程中会遇到使用volatile关键字的情况。v ... -
java之yield(),sleep(),wait()区别详解-备忘笔记
2013-02-25 14:32 6101、sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
Java Thread join() 的用法
2013-02-25 13:24 569Java Thread中, join() 方法主要是让调用改方 ...
相关推荐
Java多线程Semaphore工具的使用详解.rar
Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证
java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...
JAVA多线程--信号量(Semaphore)_.docx
主要介绍了JAVA 多线程之信号量(Semaphore)实例详解的相关资料,需要的朋友可以参考下
1)CountDownLatch(同步倒数计数器:等待多线程(或者多步骤)完成) 2)CyclicBarrier(循环屏障:同步屏障) 3)Semaphore(信号量:控制并发进程数) 主要参考资料:java并发编程的艺术、Java并发——...
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
适用人群:适合想了解或学习高并发多线程的 IT 学生、开发人员、研究人员以及使用Java多线程进行开发的任何人。 能学到什么:常见Java高并发多线程面试问题及在相关场景下如何处理和解决这些问题。 阅读建议:通过...
目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ReadWriteLock倒计数器 CountDownLatch循环栅栏 CyclicBarrier信号量 Semaphore 线程安全 Thread Safety JMM JMM(Java Memory Model)是一种基于计算机内存...
Java并发编程的核心概念包括: 线程(Thread):线程是程序执行流的最小单元。...原子操作(Atomic Operations):原子操作是不可中断的操作,即在多线程环境中,这些操作要么完全执行,要么完全不执行。
本书全面解析了Java并发编程的核心概念、原理和实践,帮助读者深入理解多线程并发编程的精髓,提升编程能力和系统性能。 书中首先介绍了并发编程的基础知识,包括线程的基本概念、线程的生命周期、线程安全等问题。...
Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。 Semaphore实现的功能类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少个人去上厕所呢?同时只能有5个人能够...
【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...
SimpleFork提供一套类似于JAVA多线程的进程控制接口,提供回收、同步、互斥、通信等方案,开发者可以关注业务问题,不需要过多考虑进程控制。 引入 composer require jenner/simple_fork require path/to/...
主要介绍了Java多线程同步器代码详解,文章分别介绍了是CountDownLatch,Semaphore,Barrier和Exchanger以及其相关代码示例,具有一定参考价值,需要的朋友可以了解下。
Semaphore 中文称信号量,它和ReentrantLock 有所区别,ReentrantLock是排他的,也就是只能允许一个线程拥有资源,Semaphore是共享的,它允许多个线程同时拥有资源,是AQS中共享模式的实现,在前面的AQS分析文章中,...
JUC(Java Util Concurrent)是Java中用于并发编程的工具包,提供了一组接口和类,用于处理多线程和并发操作。JUC提供了一些常用的并发编程模式和工具,如线程池、并发集合、原子操作等。 JUC的主要特点包括: ...
Java并发之AQS详解 CountDownLatch CountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程(这里不涉及)。 我们首先来看看怎么实现一个线程等待多个线程吧。 工厂中,对产品...
多线程控制的三大安全类:CountDownLatch、CyclicBarrier、Semaphore,这工具包将其封装,可以让初学者更容易学习以及让开发者更容易调用,不需要自己重新编写核心代码。具体事例在源码中。
『死磕Java并发编程系列』 01 十张图告诉你多线程那些破事 『死磕Java并发编程系列』 02 面试官:说说什么是Java内存模型? 『死磕Java并发编程系列』 03 面试必问的CAS原理你会了吗? 『死磕Java并发编程系列』 04 ...