java在for循环中使用concurrent包进行多线程编程
来源:互联网 发布:淘宝在手机上怎么投诉 编辑:程序博客网 时间:2024/06/17 00:46
最近在做接口的时候总是遇到一个for语句中 每次循环会涉及很多资源,包括 ftp io db,总想用现场来控制太.找到一篇文章 http://daoger.javaeye.com/blog/142485 写的不错.自己写了2个demo
1. 主线程不等待
public class CopyOfTestThreadPool {
public static void main(String args[]) throws InterruptedException {
// only two threads
ExecutorService exec = Executors.newFixedThreadPool(20);
List<Long> list = new ArrayList<Long>();
for(int index = 0; index < 1000000; index++){
list.add(System.nanoTime());
}
long start = System.currentTimeMillis();
for (Long long1 : list) {
final Long l = long1;
exec.execute(new Runnable(){
public void run() {
System.out.println(l);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
}
// must shutdown
exec.shutdown();
long end = System.currentTimeMillis();
System.out.print("共计用时 ");
System.out.println(end - start);
}
}
2 主线程会等待
public class TestCountDownLatch {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
// 开始的倒数锁
final CountDownLatch begin = new CountDownLatch(1);
// 结束的倒数锁
final CountDownLatch end = new CountDownLatch(10000);
// 十名选手
final ExecutorService exec = Executors.newFixedThreadPool(10);
for (int index = 0; index < 10000; index++) {
final int NO = index + 1;
Runnable run = new Runnable() {
public void run() {
try {
begin.await();
Thread.sleep((long) (Math.random() * 10));
} catch (InterruptedException e) {
} finally {
end.countDown();
}
}
};
exec.submit(run);
}
System.out.println("Game Start");
begin.countDown();
end.await();
System.out.println("Game Over");
exec.shutdown();
System.out.print("共计用时 ");
System.out.println(System.currentTimeMillis() - start);
}
}
详细看上面那位老兄的blog
- java在for循环中使用concurrent包进行多线程编程
- 如何在for循环中使用多线程
- 使用java.util.concurrent包处理多线程
- 使用java.util.concurrent包处理多线程
- java多线程concurrent包
- JAVA并发编程 - concurrent包的使用
- jdk1.5中java.util.concurrent包编写多线程(一)
- 使用java.util.concurrent包多线程处理数据
- java并发编程concurrent包
- 在C++中使用openmp进行多线程编程
- Java中concurrent包中线程池的使用
- java并发包concurrent多线程示例
- java多线程管理 concurrent包用法详解
- (java多线程并发)concurrent包的实现
- Java多线程Concurrent包内容介绍
- JAVA多线程 浅入Concurrent包
- java多线程管理concurrent包用法详解
- java多线程管理 concurrent包用法详解
- OO设计原则总结
- POJ 1028 Web Navigation
- D2 归来, 特此YC一篇
- 忆龙2009:用windows live 2009写CNBLOG博客
- 数组排序汇总--[Java]
- java在for循环中使用concurrent包进行多线程编程
- 台南部海域发生7.2级地震 福建有感
- jquery技巧总结/转贴
- windows 消息列表 /转贴
- 表加边框
- C#正则表达式整理备忘 转贴
- Servlet映射到多个URL中的一些问题
- 每个Java初学者都应该搞懂的六个问题--[Java]
- ICON图标资源集结号