- 浏览: 518990 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (310)
- PHP (46)
- Java (50)
- Perl (0)
- Bash (5)
- C# (9)
- JavaScript (5)
- InDesign (7)
- 百宝箱 (5)
- 排错 (3)
- 招聘 (5)
- PHP他山之石 (3)
- SQL(DML) (10)
- Flex (15)
- LAMP (1)
- DIV+CSS (1)
- C#2008 (4)
- LOGO (7)
- WorkLog (1)
- 工作 (26)
- Groovy (7)
- 海量数据 (4)
- C/C++ (1)
- Android (1)
- PYTHON (13)
- Java开发实战1200例 (1)
- Java枚举与泛型 (16)
- Java基础应用 (24)
- poj (3)
- Java数组与集合 (18)
- 疑难解析 (3)
- JavaWeb (8)
- Jython (2)
- 成功之路 (0)
- Golang (2)
- Spring (2)
- 微信小程序 (0)
最新评论
-
DawnBells:
...
java.util.concurrent 之六:使用Future类和Callable类 -
kanglecjr:
http://tieba.baidu.com/f?kz=101 ...
泰语字母好看的手写体 -
zxjlwt:
学习了。http://surenpi.com
java.util.concurrent 之六:使用Future类和Callable类 -
spring_springdata:
java jsoup开源框架demo使用实例教程源代码下载:h ...
JSOUP获取网页数据返回403错误(403 error loading URL,connection类) -
narochids:
MARK!
JavaScript+Ajax实例大全(1521例以上),可以随编辑随执行
在实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行。
比如有几个旅行团需要途经深圳、广州、韶关、长沙最后到达武汉。旅行团中有自驾游的,有徒步的,有乘坐旅游大巴的;这些旅行团同时出发,并且每到一个目的地,都要等待其他旅行团到达此地后再同时出发,直到都到达终点站武汉。
这时候 CyclicBarrier 就可以派上用场。CyclicBarrier最重要的属性就是参与者个数,另外最要方法是await()。当所有线程都调用了await()后,就表示这些线程都可以继续执行,否则就会等待。
可能的执行结果:
比如有几个旅行团需要途经深圳、广州、韶关、长沙最后到达武汉。旅行团中有自驾游的,有徒步的,有乘坐旅游大巴的;这些旅行团同时出发,并且每到一个目的地,都要等待其他旅行团到达此地后再同时出发,直到都到达终点站武汉。
这时候 CyclicBarrier 就可以派上用场。CyclicBarrier最重要的属性就是参与者个数,另外最要方法是await()。当所有线程都调用了await()后,就表示这些线程都可以继续执行,否则就会等待。
package test; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestCyclicBarrier{ // 徒步需要的時間 private static int[] timeWalk = { 5, 8, 15, 15, 10 }; // 自駕遊 private static int[] timeSelf = { 1, 3, 4, 4, 5 }; // 旅遊大巴 private static int[] timeBus = { 2,4,6,6,7 }; static String now(){ SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); return sdf.format(new Date()) + ": "; } static class Tour implements Runnable{ private int[] times; private CyclicBarrier barrier; private String tourName; public Tour(CyclicBarrier barrier, String tourName, int[] times){ this.times=times; this.tourName=tourName; this.barrier=barrier; } public void run(){ try{ Thread.sleep(times[0]*1000); System.out.println(now() + tourName + " Reached Shenzhen"); barrier.await(); Thread.sleep(times[1]*1000); System.out.println(now() + tourName + " Reached Guangzhou"); barrier.await(); Thread.sleep(times[2]*1000); System.out.println(now() + tourName + " Reached Shaoguan"); barrier.await(); Thread.sleep(times[3]*1000); System.out.println(now() + tourName + " Reached Changsha"); barrier.await(); Thread.sleep(times[4]*1000); System.out.println(now() + tourName + " Reached Wuhan"); barrier.await(); }catch(InterruptedException e){ }catch(BrokenBarrierException e){ } } } public static void main(String[] args){ // 三個旅行團 CyclicBarrier barrier = new CyclicBarrier(3); ExecutorService exec = Executors.newFixedThreadPool(3); exec.submit(new Tour(barrier, "WalkTour", timeWalk)); exec.submit(new Tour(barrier, "SelfTour", timeSelf)); // exec.submit(new Tour(barrier, "BusTour", timeBus)); exec.shutdown(); } }
可能的执行结果:
21:47:18: SelfTour Reached Shenzhen 21:47:19: BusTour Reached Shenzhen 21:47:22: WalkTour Reached Shenzhen 21:47:25: SelfTour Reached Guangzhou 21:47:26: BusTour Reached Guangzhou 21:47:30: WalkTour Reached Guangzhou 21:47:34: SelfTour Reached Shaoguan 21:47:36: BusTour Reached Shaoguan 21:47:45: WalkTour Reached Shaoguan 21:47:49: SelfTour Reached Changsha 21:47:51: BusTour Reached Changsha 21:48:00: WalkTour Reached Changsha 21:48:05: SelfTour Reached Wuhan 21:48:07: BusTour Reached Wuhan 21:48:10: WalkTour Reached Wuhan
发表评论
-
2-02 Spring的Java配置方式
2018-09-07 05:25 6261) 在Eclipse中新建一个Maven项目。 2 ... -
多位置控制系统 以及 在线诊断系统 之设计
2015-05-29 08:01 924利用 Groovy 生成输入数据: def f = new ... -
管理密码集中化
2015-03-28 17:13 1221项目需求:把指定的Spring配置文件的指定密码提取出来, ... -
更改eclipse中java和jsp文件字体的大小
2014-11-27 07:15 14621.更改java文件大小设置 Window->pre ... -
14.8 Struts2 基础之 实践与练习
2014-11-25 08:32 73214.8 实践与练习 1. 实现用户的中间退出 ... -
Gradle 之插件 gretty 入门
2014-11-23 22:42 12715英文来源: http://akhikhl.github. ... -
Gradle学习系列之三——读懂Gradle语法
2014-11-23 20:15 2148在本系列的上篇文章中 ... -
Gradle学习系列之二——创建Task的多种方法
2014-11-23 19:46 727在本系列的上篇文章中 ... -
Gradle学习系列之一——Gradle快速入门
2014-11-23 19:24 1650这是一个关于Gradle的学习系列,其中包含以下文章: ... -
使用Maven2 原型(Archetype) 建立Struts程序框架(骨架)
2014-11-25 07:35 654使用Maven2 原型(Archet ... -
maven学习(上)- 基本入门用法
2014-11-25 07:35 863一、下载及安装 1.1 下载maven 3.1.1 ... -
JDBC连接MySQL
2014-11-18 08:05 1175前期准备工作,安好JDK,MyEclipse。 下载JDB ... -
Maven usage
2014-10-23 09:27 672P:\>mvn --help usage: m ... -
第1章 初识Java7
2014-10-22 08:17 896第1章 初识Java 7 本章内容: Java 既 ... -
eclipse性能优化
2014-10-19 02:34 754=>启动优化 Window > Prefer ... -
ora-01950:对表空间XXX无权限
2014-10-16 13:30 6295以前执行了grant dba to 用户 查了一下dba角 ... -
Missing artifact com.sun:tools:jar:1.5.0:system (转)
2014-10-16 09:41 994记得以前写过这个错误的解决方案,找了很长时间,自己都没找到 ... -
Mockito(一) -- 入门篇
2014-10-13 20:32 992Mockito是一种mock工具/ ... -
1.14 标准注解
2014-10-10 08:11 5401.14.1 The Built-In Annotation ... -
用Ant实现Java项目的自动构建和部署
2014-10-09 20:16 779原文地址:http://tech.it168.com/j/2 ...
相关推荐
"java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
`java.util.concurrent.ExecutionException` 是Java并发编程中一个常见的异常,通常在执行Future对象的get()方法时抛出。这个异常表明在异步任务的执行过程中发生了异常。当我们使用ExecutorService提交任务并尝试...
Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...
### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...
backport-util-concurrent.jarbackport-util-concurrent.jarbackport-util-concurrent.jar
本文将详细探讨Atlassian发布的`atlassian-util-concurrent-0.0.12.jar`库,这是一个专门针对并发处理的工具集,旨在简化Java开发中的多线程操作。 `atlassian-util-concurrent-0.0.12.jar.zip`是这个库的压缩文件...
java.util.concurrent总体概览图。 收取资源分3分。需要的同学可以下载一下。 java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和...
java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
### Java.util.Date与Java.sql.Date互转及字符串转换为日期时间格式 #### 一、Java.util.Date与Java.sql.Date的基本概念 在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类...
java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:953) java.util.LinkedList$ListItr.next(LinkedList.java:886) JMeter.plugins.functional.samplers.websocket.ServiceSocket....
Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一系列中等层次的并发支持类集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java Specification Request, JSR)166创建而成...
如何启动:以win7系统为例,最好jdk8 1.打开cmd,cd到jdk的path,本机是:cd C:\Java\jdk6\bin ...java -cp D:\javaConcurrentAnimated.jar vgrazi.concurrent.samples.launcher.ConcurrentExampleLauncher
一个高性能的Java线程库,该库是 JDK 1.5 中的 java.util.concurrent 包的补充,可用于基于并发消息机制的应用。该类库不提供远程的消息功能,其设计的宗旨是实现一个内存中的消息传递机制. 主要特点有: * All ...
### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常需要处理日期和时间相关的操作。Java标准库提供了两个重要的日期类:`java.util.Date` 和 `java.sql.Date`。虽然它们名字相似,但...
java.util.concurrent 多线程框架 java.util.concurrent 多线程框架是 Java 语言中用于多线程编程的库。该库提供了多种线程池实现、并发集合、同步器、lock 等多种机制,以便开发者更方便地编写高效、可靠的多线程...
在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging.Logger` 的实例。可以通过调用 `Logger` 类中的静态方法 `getLogger...
Java并发工具包(java.util.concurrent)是Java平台上用于高效、安全地处理多线程编程的重要组件。这个包包含了丰富的并发工具类,旨在帮助开发者构建高度并发的程序,提高程序的性能和可伸缩性。本资源是该工具包的...
Java编程语言中,`java.util.Date` 和 `java.sql.Date` 都是用来处理日期的类,但它们在用途和特性上有所不同。理解这两者之间的差异对于进行数据库操作至关重要。 1. **`java.util.Date`**: - `java.util.Date` ...