- 浏览: 552024 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (344)
- ··············未分类············· (33)
- Eclipse 插件 (15)
- EDA 工具 (1)
- Linux/Unix (3)
- Java (43)
- Java Applet (1)
- Java Draw2d (22)
- Java Draw2d version2 (6)
- Java GEF (2)
- Java SWT (21)
- Java SWT Image 图像 (21)
- Java SWT Tree (16)
- Java SWT Table (4)
- Java SWT TableViewer (11)
- Java SWTbot (4)
- Java Test (2)
- Java Thread 多线程 (22)
- Java Zest (5)
- RC2_3S400学习笔记 (16)
- tcl 脚本 (10)
- Verilog (7)
- XML (6)
- 国家 (5)
- 感叹 (4)
- 面试题 (9)
- 生活 (36)
- 足球 世界杯 (8)
- 老公看你的 (3)
- web开发 (1)
- 数据结构——图 (7)
- c language (1)
最新评论
-
zxjlwt:
路过素人派http://surenpi.com
SWT 树的事件 SWT.Selection SWT.CHECK SWT.DefaultSelection -
hj01kkk:
1楼用法正解
JDK 7 中的 Fork/Join 模式 -
fish_no7:
使用 new SortTask().fork()
JDK 7 中的 Fork/Join 模式 -
wpf523:
mark
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数 -
uniquejava:
以前碰到过,估计是在icu包中实现了双击自动选中一段文本的功能 ...
java.lang.NoClassDefFoundError: com/ibm/icu/text/BreakIterator
参考:http://www.ibm.com/developerworks/cn/java/j-5things5.html
【关于 java.util.concurrent 您不知道的 5 件事,第 2 部分】
1,Semaphore
适用于:限制未处理的特定资源请求(线程/操作)数量。
public class SemApp { public static void main(String[] args) { Runnable limitedCall = new Runnable() { final Random rand = new Random(); final Semaphore available = new Semaphore(3); int count = 0; public void run() { int time = rand.nextInt(15); int num = count++; try { available.acquire(); System.out.println("Executing " + "long-running action for " + time + " seconds... #" + num); Thread.sleep(time * 1000); System.out.println("Done with #" + num + "!"); available.release(); } catch (InterruptedException intEx) { intEx.printStackTrace(); } } }; for (int i=0; i<10; i++) new Thread(limitedCall).start(); } }
程序中实现了,限制了同时打开的任务数是三个。
结果 写道
Executing long-running action for 9 seconds... #0
Executing long-running action for 7 seconds... #2
Executing long-running action for 0 seconds... #1
Done with #1!
Executing long-running action for 1 seconds... #3
Done with #3!
Executing long-running action for 6 seconds... #4
Done with #2!
Executing long-running action for 5 seconds... #5
Done with #4!
Executing long-running action for 6 seconds... #6
Done with #0!
Executing long-running action for 12 seconds... #7
Done with #5!
Executing long-running action for 1 seconds... #8
Done with #8!
Executing long-running action for 12 seconds... #9
Done with #6!
Done with #7!
Done with #9!
Executing long-running action for 7 seconds... #2
Executing long-running action for 0 seconds... #1
Done with #1!
Executing long-running action for 1 seconds... #3
Done with #3!
Executing long-running action for 6 seconds... #4
Done with #2!
Executing long-running action for 5 seconds... #5
Done with #4!
Executing long-running action for 6 seconds... #6
Done with #0!
Executing long-running action for 12 seconds... #7
Done with #5!
Executing long-running action for 1 seconds... #8
Done with #8!
Executing long-running action for 12 seconds... #9
Done with #6!
Done with #7!
Done with #9!
对于特定资源和线程访问数的限定Semaphore是个不错的选择。这里使用了Semaphore一次使用和释放一个通行证,Semaphore还可以一次使用和释放多个通行证。
2,CountDownLatch
public class CDLApp { public static void main(String[] args) throws InterruptedException, java.io.IOException { System.out.println("Prepping..."); Race r = new Race( "horse 1", "horse 2", "horse 3", "horse 4", "horse 5", "horse 6", "horse 7", "horse 8" ); System.out.println("It's a race of " + r.getDistance() + " lengths"); System.out.println("Press Enter to run the race...."); System.in.read(); r.run(); } } class Race { private Random rand = new Random(); private int distance = rand.nextInt(250); private List<String> horses = new ArrayList<String>(); public Race(String... names) { this.horses.addAll(Arrays.asList(names)); } public int getDistance() {return distance;} public void run() throws InterruptedException { System.out.println("And the horses are stepping up to the gate..."); final CountDownLatch start = new CountDownLatch(1); final CountDownLatch finish = new CountDownLatch(horses.size()); final List<String> places = Collections.synchronizedList(new ArrayList<String>()); for (final String h : horses) { new Thread(new Runnable() { public void run() { try { start.await();//等待赛马开始 System.out.println(h + " stepping up to the gate..."); int traveled = 0; while (traveled < distance) { //前进一次 暂停 0-2 秒 Thread.sleep(rand.nextInt(3) * 1000); //前进 0-14 米 traveled += rand.nextInt(15); System.out.println(h + " advanced to " + traveled + "!"); } System.out.println(h + " crossed the finish!"); places.add(h); finish.countDown();//一个马到达终点就 减去一, 倒数完成比赛结束 } catch (InterruptedException intEx) { System.out.println("ABORTING RACE!!!"); intEx.printStackTrace(); } } }).start(); } System.out.println("And... they're off!"); start.countDown();//开始赛马 finish.await();//等待所有的马跑完 System.out.println("============================================"); System.out.println("And we have our winners!"); System.out.println("<"+places.get(0)+">" + " took the gold..."); System.out.println("<"+places.get(1)+">" + " got the silver..."); System.out.println("and " + "<"+places.get(2)+">" + " took home the bronze."); System.out.println("============================================"); } }
上面的程序利用CountDownLatch 描述一个赛马的过程,首先让所有马在门闩那里(start.countDown();//开始赛马)等待开始,每匹马冲过终点后(finish.countDown),finish.await()等待所有的马冲过终点后,发奖牌。
3,ScheduledExecutorService
public class Ping { public static void main(String[] args) { ScheduledExecutorService ses = Executors.newScheduledThreadPool(1); Runnable pinger = new Runnable() { public void run() { System.out.println("PING!"); } }; ses.scheduleAtFixedRate(pinger, 1, 2, TimeUnit.SECONDS); } }
模拟心脏每隔2秒钟跳动一次。顺便说一下,如果用户希望取消心跳,scheduleAtFixedRate
调用将返回一个 ScheduledFuture
实例,它不仅封装了结果(如果有),还拥有一个 cancel
方法来关闭计划的操作。
发表评论
-
多线程的Wait返回它等待的下方
2014-08-15 14:16 519多线程的Wait返回它等待的下方。 Java Code ... -
多线程构造函数
2014-04-04 11:50 2050http://hi.baidu.com/tengxiaofe ... -
关于volatile
2013-01-28 13:24 577Volatile修饰的成员变量在每次被线程访问时,都强迫从共享 ... -
Java 多线程例子10 线程之间通信 wait notify notifyAll
2010-07-26 11:24 1278回答问题:http://www.iteye.com/probl ... -
java Thread 停止 开始 暂停
2010-07-23 15:07 241291,写了一个小程序: public class TestTh ... -
【转载】java Timer TimerTask
2010-07-22 11:31 17871,Timer Timer的实质上就是一个多线程,从它的类中 ... -
【转载】DelayQueue 的使用
2010-07-20 20:15 1300原文:http://ideasforjava.iteye.co ... -
多线程 CyclicBarrier
2010-07-20 19:38 927原文:http://blog.csdn.net/qian_34 ... -
java多线程 BlockingQueue 和 SynchronousQueues
2010-07-20 15:30 1429参考:http://www.ibm.com/developer ... -
利用多核CPU计算大的列表中的整数和 CyclicBarrier CountDownLatch ExecutorService
2010-07-20 14:12 1266原文:http://flysnow.iteye.c ... -
JDK 7 中的 Fork/Join 模式
2010-07-20 10:59 1823参考1:http://www.ibm.com/develope ... -
Java 多线程例子10 控制线程的生命 stop
2010-07-19 21:13 1277在Thread类中stop已经不推荐大家使用了,因为使用sto ... -
Java 多线程例子9 线程之间通信 wait notify notifyAll
2010-07-19 20:07 2817下面参照《Java就业培训教材》写了一个相似的线程之间通信的例 ... -
Java 多线程例子8 线程状态
2010-07-19 17:27 1196原文:http://shihaiyang.iteye.com/ ... -
Java 多线程例子7 线程安全 死锁
2010-07-19 17:07 1479死锁:在多个线程里对多个同步对象具有循环依赖时常会出现死锁。最 ... -
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数
2010-07-18 18:06 2230线程安全 出现线程安 ... -
Java 多线程例子5 实际例子的讨论
2010-07-18 15:18 9951,网络聊天程序,如QQ。 发送信息和接受信息肯定要连个线程 ... -
Java 多线程例子4 继承Thread 实现Runnable
2010-07-16 19:48 16791,Runnable例子 class ThreadDemo ... -
Java 多线程例子3 联合线程 join()
2010-07-16 17:57 22371,联合线程实际上就是 ... -
Java 多线程例子2 前台线程(用户线程) 后台线程(守护线程 ) setDaemon
2010-07-16 15:16 28481,setDaemon(true)后就是后台线程(守护线程 ) ...
相关推荐
Java多线程Semaphore工具的使用详解.rar
Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证
java并发工具类(CountDownLatch+Semaphore+Exchanger);java并发工具类(CountDownLatch+Semaphore+Exchanger);java并发工具类(CountDownLatch+Semaphore+Exchanger);java并发工具类(CountDownLatch+...
CountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程(这里不涉及)。 我们首先来看看怎么实现一个线程等待多个线程吧。 工厂中,对产品需要进行质检,5个工人进行检查,所有...
JAVA多线程--信号量(Semaphore)_.docx
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
1)CountDownLatch(同步倒数计数器:等待多线程(或者多步骤)完成) 2)CyclicBarrier(循环屏障:同步屏障) 3)Semaphore(信号量:控制并发进程数) 主要参考资料:java并发编程的艺术、Java并发——...
内容概要:最新2023年Java高并发多线程后端面试题整理, 包含线程池,并发集合,volatile,CountDownLatch,Semaphore,Phaser,AQS,ReentrantLock,ReentrantLock等等问题, 用简洁明了的语言,通俗易懂地阐述了高...
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ReadWriteLock倒计数器 CountDownLatch循环栅栏 CyclicBarrier信号量 Semaphore 线程安全 Thread Safety JMM JMM(Java Memory Model)是一种基于计算机内存...
主要介绍了JAVA 多线程之信号量(Semaphore)实例详解的相关资料,需要的朋友可以参考下
主要介绍了python多线程semaphore实现线程数控制的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java并发编程的核心概念包括: 线程(Thread):线程是程序执行流的最小单元。...原子操作(Atomic Operations):原子操作是不可中断的操作,即在多线程环境中,这些操作要么完全执行,要么完全不执行。
多线程(C++)同步Semaphore
主要介绍了Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解的相关资料,需要的朋友可以参考下
semaphore控制多线程循序执行,网上 找的例子更改的希望对大家有用
Delphi多线程之Semaphore_(信号对象).pdf
1.2 Semaphore概述 Semaphore的基本用法 2.1 创建Semaphore对象 2.2 acquire()方法 2.3 release()方法 控制资源访问数量 3.1 场景介绍 3.2 使用Semaphore控制资源访问 实现有界资源池 4.1 场景介绍 4.2 使用...
Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量。就这一点而言,单纯的synchronized 关键字是实现不了的。 直接看例子吧,这个例子包含3个类,一个是线程类,一个是 Semaphore 关键代码类,一个类是...