- 浏览: 265278 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (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 468Java通过Executors提供四种线程池,分别为: new ... -
并发线程组件 Amino
2013-07-23 13:29 695Amino CBB (Concurrent Building ... -
ThreadLocal的介绍(利用变量副本实现多线程访问同一变量)
2013-07-17 14:20 803早在Java 1.2推出之时,Ja ... -
ThreadGroup其实比ExecutorService更好
2013-07-17 13:32 701用java做抓取的时候免不了要用到多线程的了,因为要同时抓取多 ... -
Java多线程同步器
2013-07-12 17:00 860CyclcBarrier 在实际应用中,有时候需要多个线程 ... -
Java Thread.interrupt 害人! 中断JAVA线程
2013-07-12 16:37 767程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难 ... -
Java多线程学习——Condition的使用
2013-07-12 14:36 834Condition 将 Object 监视器方法(wait、n ... -
java多线程设计wait
2013-07-12 14:30 694在Java中,这个机制的实 ... -
Monitor
2013-07-12 10:44 15341. 什么是Monitor? Monitor其实是一 ... -
处理 子线程的返回值
2013-07-08 14:19 859package com.jimmy.Thread.Conc ... -
ExecutorService的execute和submit方法
2013-07-05 17:21 1032因为之前一直是用的exec ... -
Exchanger-兄弟线程的信息交换
2013-07-05 16:23 696如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使 ... -
lockInterruptibly 和lock的区别
2013-06-26 16:36 886lockInterruptibly 与 lock比较区别在于 ... -
慎重使用volatile关键字
2013-06-26 11:10 743volatile关键字相信了解Java多线程的读者都很清楚它的 ... -
对synchronized(this)的一些理解
2013-06-26 10:18 673一、当两个并发线程访问同一个对象object中的这个synch ... -
java中的lock和synchronized区别
2013-06-26 10:02 5881、ReentrantLock 拥有Synchronized相 ... -
线程sleep,join,yield的区别
2013-06-21 17:37 5131.sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
初学Java多线程:慎重使用volatile关键字
2013-02-25 15:18 693学习Java多线程中会遇到使用volatile关键字的情况。v ... -
java之yield(),sleep(),wait()区别详解-备忘笔记
2013-02-25 14:32 6321、sleep() 使当前线程(即调用该方法的线程)暂停执行 ... -
Java Thread join() 的用法
2013-02-25 13:24 587Java Thread中, join() 方法主要是让调用改方 ...
相关推荐
《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...
综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。
JAVA多线程练习题答案详解 在本文中,我们将对 JAVA 多线程练习题的答案进行详细的解释和分析。这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...
Java多线程编程是开发高并发应用的关键技术之一,Semaphore工具是Java并发包(java.util.concurrent)中的一个重要组件,用于控制同时访问特定资源的线程数量。本篇将深入讲解Semaphore的基本概念、工作原理以及如何...
Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个部分并同时下载,显著提高了下载速度。在Java中实现多线程下载器涉及许多关键概念和技术,包括线程、并发控制、网络I/O...
Java多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关概念、线程类和接口的使用,以及线程的同步与互斥。 首先,我们需要理解进程与...
总之,Java多线程设计模式是每个Java开发者必备的技能之一。深入学习并熟练运用这些模式,将有助于你编写出更高效、稳定和易于扩展的多线程应用程序。这个PDF版教程和源代码集合是你学习多线程设计模式的理想资源,...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...
本知识点将深入探讨Java多线程设计以及如何利用“不可变对象”(immutable objects)来避免多线程环境中的非安全问题。 一、Java多线程基础 1. 线程的创建:Java提供了两种创建线程的方式——继承Thread类和实现...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。
Java 多线程之并发锁 Java 中的多线程编程是指在一个程序中同时运行多个线程,以提高程序的执行效率和响应速度。在多线程编程中,线程间的同步是非常重要的,因为不同的线程可能会同时访问同一个共享资源,导致数据...
Java多线程技术是编程领域中的重要概念,尤其在开发高效、并发的网络应用程序时,如简易聊天程序,它的应用尤为关键。在这个“java 多线程简易聊天 精简版”项目中,我们将深入探讨Java如何实现多线程环境下的客户端...
Java多线程是Java编程中的核心概念,尤其对于高级开发者来说,掌握多线程的深入理解和应用至关重要。这本书“java多线程进阶”显然旨在帮助读者深化这方面的理解,打通编程中的“任督二脉”,使开发者能够更加熟练地...
在这个"Java多线程之龟兔赛跑"的例子中,我们看到了如何使用Java的Thread类来创建和管理线程,模拟经典的寓言故事——龟兔赛跑。 首先,我们创建了一个名为`WuguiThread`的类,它继承自`Thread`。这个类代表乌龟...
在Java多线程编程中,线程的并发控制是非常关键的一部分,它确保多个线程能够协同工作并有效地访问共享资源。Java 5.0引入了四个新的同步工具类,它们是Semaphore、CountDownLatch、CyclicBarrier和Exchanger,用于...