- 浏览: 1574647 次
- 来自: 上海
文章分类
- 全部博客 (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 948public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2234经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5600package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 915import java.util.concurrent ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 964//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1792更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1374import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 785import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2371import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 886// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1134import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 768import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1115import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3852import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 932/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 983import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1805Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 968/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2181package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1947PO(persistant object) 持久 ...
相关推荐
包含 jdk1.5免安装、jdk1.6免安装、jdk1.8(32和64)
jdk1.5.exe jdk1.5 jdk1.5下载
前几天上传过这个资源,因为是在jdk1.6上开发的, 测试了一下在jdk1.5上不能用, 今天重新用jdk1.5编译了一下, 这个是可以支持jdk1.5+的 将 pu-xlscommon-1.0.0.jar 添加到工程的 /lib 目录下 用法在附件中 XlsTest....
JDK1.5,JDK1.5
绝版jdk1.5,非常不错的资源。用起来很好。是 Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新 的值。通过getName/setName来访问name属性,...
测试可用的linux版jdk1.5,jdk-1_5_0_19-linux-i586-rpm.bin
jdk1.5.0.22 是jdk1.5的最后一版,jdk1.5 windows 64位官方正式版,绝对有效,jdk1.5 windows 64位官方正式版,绝对有效
很实用的JAVA API中文参考文档,如果你开始讨厌HTML版本的API中文文档,试试这个吧,强大的索引功能使你开发更加愉快,分两卷,要都下了才能解压。
jdk 1.5 中文 api chm jdk 1.5 中文 api chm
jdk1.5.0.22 是jdk1.5的最后一版
“JDK1.5”(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-else 循环,自动装包/拆包,枚举,可变参数, 静态导入
Java-jdk1.5安装包
JDK1.5 API完整版JDK1.5 API完整版JDK1.5 API完整版
Jdk1.5Doc_CN.chm Jdk1.5Doc_CN.chm Jdk1.5Doc_CN.chm Jdk1.5Doc_CN.chm
详细介绍java对象的使用和说明详细介绍java对象的使用和说明详细介绍java对象的使用和说明详细介绍java对象的使用和说明详细介绍java对象的使用和说明
JDK1.5+1.6整合版(文件为txt文件,里面有百度网盘下载地址<文件太大所以用网盘>) 文件里含有1.5和1.6两个版本的JDK,并且附有一环境变量创建办法以及切换版本方法
jdk1.5 64位 windows版
jdk1.5压缩包 解压缩可用 用于Windows系统
jdk1.5api,方便搜索版,不解释,谁用谁知道
转载 jdk1.5的一些新特性,希望能帮助大家!