- 浏览: 1590473 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
/*
* 还有一个利用场景: 应用启动的时候 ,检查所有的服务是否正确启动,如果正确启动,应用程序就可以启动成功.
**/
* 还有一个利用场景: 应用启动的时候 ,检查所有的服务是否正确启动,如果正确启动,应用程序就可以启动成功.
**/
import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * CountDownLatch 模拟 运动会长跑 ,裁判 发令 --- 运动员开始努力奔跑 ---- 裁判收集结果 * 1个裁判 和 3个运动员 */ public class CountDownLatchTest1 { public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); final CountDownLatch referee = new CountDownLatch(1); // final CountDownLatch athletes = new CountDownLatch(3); // CompletionService<String> completionService =new ExecutorCompletionService<String>(executor); final Lock lock=new ReentrantLock(); //创建要 运行的任务 长跑 Callable<String> callable=new Callable<String>() { @Override public String call(){ try { System.out.println("运动员"+Thread.currentThread().getName()+"等待裁判发令"); referee.await(); System.out.println("运动员"+Thread.currentThread().getName()+"收到裁判发令,已经出发"); lock.lock(); //模拟长跑任务 long stime=System.currentTimeMillis(); String thread_name = Thread.currentThread().getName(); for (int i = 0; i < thread_name.length(); i++) { System.out.print(thread_name.charAt(i)); Thread.sleep(new Random().nextInt(10)*100); } System.out.println(); System.out.println("运动员"+Thread.currentThread().getName()+"已经跑完"); //跑完了 athletes.countDown(); return "运动员"+Thread.currentThread().getName()+"花的时间为:"+(System.currentTimeMillis()-stime); } catch (InterruptedException e) { e.printStackTrace(); }finally{ //lock.unlock(); } return "运动员比赛出现失误"; } }; for (int i = 0; i < 3; i++) { completionService.submit(callable); } try { System.out.println("裁判"+Thread.currentThread().getName()+"即将发布命令"); Thread.sleep((long)Math.random()*20000); referee.countDown(); System.out.println("裁判"+Thread.currentThread().getName()+"已经发布命令,等待结果"); athletes.await(); System.out.println("裁判"+Thread.currentThread().getName()+"收到了结果如下:-----------------"); for (int i = 0; i < 3; i++) { try { System.out.println(completionService.take().get()); } catch (ExecutionException e) { e.printStackTrace(); } } } catch (InterruptedException e) { e.printStackTrace(); } executor.shutdown(); } }
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @description 三个领导 审批 --一个采购员去采购 */ public class CountDownLatchTest2 { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final CountDownLatch leader = new CountDownLatch(3); //三个领导 final CountDownLatch buyer = new CountDownLatch(1); //只有一个裁判 final Lock lock=new ReentrantLock(); Runnable runnable = new Runnable() { @Override public void run() { try{ System.out.println("领导"+Thread.currentThread().getName()+"开始进行了审批"); lock.lock(); String thread_name = Thread.currentThread().getName(); for (int i = 0; i < thread_name.length(); i++) { System.out.print(thread_name.charAt(i)); } System.out.println(); System.out.println("领导"+Thread.currentThread().getName()+"已经审批完了"); leader.countDown(); //一个已经结束 if(leader.getCount()==0){ buyer.countDown(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ lock.unlock(); } } }; for (int i = 0; i < 3; i++) { service.execute(runnable); } try { System.out.println("采购员"+Thread.currentThread().getName()+"在等待,领导审批"); leader.await(); System.out.println("采购员"+Thread.currentThread().getName()+"的单子,已经通过了所有领导审批"); System.out.println("采购员去采购了...."); } catch (InterruptedException e) { e.printStackTrace(); } service.shutdown(); } }
/** * CountDownLatch 是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程 等待 子线程的结束运行 */ public class CountDownLatchTest { /** * @param args */ public static void main(String[] args) { ExecutorService service=Executors.newCachedThreadPool(); final CountDownLatch cdOrder=new CountDownLatch(1); final CountDownLatch cdAnswer=new CountDownLatch(3); for (int i = 0; i < 3; i++) { Runnable runnable =new Runnable() { public void run() { try { System.out.println("线程"+Thread.currentThread().getName()+"正准备接受命令"); cdOrder.await(); System.out.println("线程"+Thread.currentThread().getName()+"已接受命令"); Thread.sleep((long)Math.random()*10000); System.out.println("线程"+Thread.currentThread().getName()+"回应命令处理结果"); cdAnswer.countDown(); } catch (Exception e) { // TODO: handle exception } } }; service.execute(runnable); } try { Thread.sleep((long)Math.random()*10000); System.out.println("线程"+Thread.currentThread().getName()+"即将发布命令"); cdOrder.countDown(); System.out.println("线程"+Thread.currentThread().getName()+"已经发布命令,正在等待结果..."); cdAnswer.await(); System.out.println("线程"+Thread.currentThread().getName()+"已经收到所有响应结果"); } catch (Exception e) { // TODO: handle exception } } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 999public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2282经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5654package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 990import java.util.concurrent ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1010//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1826更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1417import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 816import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2398import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 925// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1174import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 802import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3893import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 965/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1023import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1842Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1005/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2232package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1989PO(persistant object) 持久 ...
相关推荐
在并发编程方面,JDK1.5引入了并发工具类(java.util.concurrent),包括Semaphore、CyclicBarrier、CountDownLatch等,这些工具极大地简化了多线程编程中的同步和协调。 在内存模型和并发性能上,JDK1.5引入了Java...
在压缩包"IBMJDK1.5linux.zip"中,主要包含的是IBM JDK 1.5的安装文件和相关文档。安装完成后,开发者可以通过设置环境变量(如JAVA_HOME、PATH)来使用这个JDK。通常,这个JDK会包含Java编译器(javac)、Java解释...
**JDK 1.5 for Windows** Java Development Kit (JDK) 1.5,也称为 Java 5.0,是Sun Microsystems开发的一个重要的Java平台版本。它在2004年9月30日正式发布,引入了许多新的特性和改进,对Java编程语言和Java...
9. **并发API(Concurrent APIs)**: JDK1.5加强了对多线程编程的支持,引入了并发工具类如`java.util.concurrent`包,包括`ExecutorService`、`Semaphore`、`CountDownLatch`等,以及`java.util.concurrent.atomic`...
JDK 1.5 引入了一系列重要的并发编程新特性,极大地改善了多线程环境下的程序设计。这些特性使得开发者能够编写更加高效、安全的并发应用程序。以下是对这些新特性的详细解释: 1. `TimeUnit`: `TimeUnit` 是一个...
《Java JDK1.5实例宝典》是一本深入解析JDK1.5版本中关键特性和类库的实践指南,涵盖了Java Mail、Servlet、JSP以及多线程等多个核心领域。这本书通过丰富的实例来帮助读者理解和掌握Java编程的精髓。 在JDK1.5中,...
Java JDK 1.5,也被称为Java 5.0,是Java开发工具包的一个重要版本,于2004年发布。这个版本引入了大量的新特性,优化和改进,极大地提升了Java编程的效率和灵活性。本API HTML文档是开发者学习和查阅Java 1.5 API的...
**Java Development Kit (JDK) 1.5 API** JDK 1.5,也被称为Java SE 5.0,是Java编程语言的一个重要版本,由Sun Microsystems(现为Oracle Corporation的一部分)于2004年9月30日发布。这个版本引入了许多新特性和...
这本书详细对比了JDK 1.4和JDK 1.5之间的差异,帮助开发者理解不同版本下线程处理的进化与改进。 在Java编程中,线程是并发执行的程序片段,它使得一个应用程序可以在同一时间执行多个任务。Java提供了丰富的API来...
- 在3.1版本中,backport-util-concurrent引入了Phaser,这是一个可重用的同步帮助器类,支持多个参与者之间的有界同步,类似于CyclicBarrier和CountDownLatch,但更灵活。Phaser可以自动调整参与者的数量,并且在...
2. **泛型(Generics)**:泛型在JDK1.5中引入,但在1.6版本中得到了进一步完善。泛型提供了一种方式来限制容器中存储的数据类型,增强了代码的类型安全性和可读性。 3. **可变参数(Variadic Parameters)**:JDK1.6...
9. **并发工具类**:JDK 1.5引入了丰富的并发工具类,如`java.util.concurrent.locks`包中的`ReentrantLock`和`Condition`,提供了更高级的锁机制。 10. **Swing GUI**:虽然在`javax.swing`包中的Swing组件已经...
首先,JDK 1.5,代号为" Tiger",是Java SE(标准版)的一个重大更新,于2004年发布。这个版本引入了许多新特性,极大地提升了Java编程的效率和灵活性。其中最重要的变化之一是泛型的引入,使得代码更具类型安全,...
1. **泛型(Generics)**:自JDK 1.5引入以来,泛型已经成为编写类型安全代码的标准方式。在1.6版本中,泛型的使用更加广泛,支持更多的语法糖,如类型通配符和泛型擦除。 2. **动态代理(Dynamic Proxies)**:JDK...
2. **枚举(Enums)**:JDK 1.5引入的枚举类型,为创建固定的、有限数量的常量提供了一种强类型的方法,比传统的常量类更安全,使用也更便捷。 3. **并发编程改进**:JDK 1.6增强了并发编程的支持,包括`java.util....
3. **泛型**: JDK 1.5引入的泛型特性,允许在代码中指定容器元素的类型,提高了代码的类型安全性和可读性。 4. **I/O流**: `java.io`包提供了一系列的流类,用于处理文件读写、网络通信等操作。 5. **线程**: `...
2. **枚举(Enums)**:JDK1.5引入,1.6继续完善,枚举类型为常量集合提供了一种强大的、类型安全的表示方式。枚举类型不能被实例化,有助于防止错误和提高代码质量。 3. **并发(Concurrency)**:1.6版本对并发库...
1. **泛型的完全实现**:在JDK 1.5中泛型被引入,但存在类型擦除,JDK 1.6对其进行了进一步的完善,增强了泛型的使用体验。 2. **增强的Swing组件**:Swing库得到了改进,提供了更好的外观和感觉,以及更多的组件和...
- **JDK1.5线程并发库**:引入了更高级的并发控制机制,如`ExecutorService`、`Callable`、`Future`等,提供了更安全、更高效的多线程解决方案,减少了线程同步和死锁的风险。 ##### 2. 创建线程的两种传统方式 - ...
9. **枚举**: 从JDK1.5开始,枚举类型提供了一种声明常量的强类型方式,相比传统的整数常量或字符串常量,枚举更安全且易于使用。 10. **NIO (非阻塞I/O)**: `java.nio`包提供了非阻塞I/O功能,允许在单个线程中...