精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-27
最后修改:2010-10-27
循环栅栏比计数器跟适合楼主的这个应用场景
public static void main(String[] args) throws InterruptedException { int threadNumber = 10; final long start = System.currentTimeMillis(); CyclicBarrier barrier = new CyclicBarrier(threadNumber,new Runnable(){ @Override public void run() { long end = System.currentTimeMillis(); System.out.println("total time : "+(end-start)+"ms"); } }); for (int i = 0; i < threadNumber; i++) { new ImportThread(barrier,i).start(); } System.out.println("main thread finished!!"); } private static class ImportThread extends Thread{ private final CyclicBarrier barrier; private final int threadID; public ImportThread(CyclicBarrier barrier,int threadID){ this.barrier = barrier; this.threadID = threadID; } public void run() { try { Thread.sleep((long) (Math.random() * 10000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(String.format("threadID:[%s] finished!!", threadID)); try { barrier.await(); } catch (InterruptedException e1) { e1.printStackTrace(); } catch (BrokenBarrierException e1) { e1.printStackTrace(); } } } |
|
返回顶楼 | |
发表时间:2010-10-28
import java.util.concurrent.*
然后做该做的事情 oracle导数据还要写程序? |
|
返回顶楼 | |
发表时间:2010-10-29
cjmcn-sh 写道 import java.util.concurrent.*
然后做该做的事情 oracle导数据还要写程序? 我前面说了因为有xmltype类型的字段,所以想用java先解析一下再插入 |
|
返回顶楼 | |
发表时间:2010-10-29
干吗不用join?没理解错的话就是主线程等着子线程们结束吧
|
|
返回顶楼 | |
发表时间:2010-10-29
最后修改:2010-10-29
yadsun 写道 nishizhutoua 写道 说句老实话,你确定你的这个需求要用多线程么?
读的方面,瓶颈在IO,用单线程,全速的读就是最快的了.除非你在读取一行数据后要对行数据进行格式化,并且这个格式化时间消耗要大于理论上的连续读两行文本时的CPU时间. 不过恐怕不容易吧,这两个时间差好几个级. 写的部分,瓶颈还是在IO,因为你要写到数据库中. 这么算两个线程就够了,生产者消费者模式即可. 假设有100万条记录,顺序执行的话光是遍历完这100万条记录就要很长时间了,现在开10个线程,每个线程只要插入10万条,是不是会快很多? 看你几块disk,只有一块的话单线顺序程读写就是最快了 磁盘是sequantial access才快的 多线程access pattern被打乱了会慢因为这相当于random access了 |
|
返回顶楼 | |