论坛首页 Java企业应用论坛

Java多线程--让主线程等待所有子线程执行完毕

浏览 54573 次
精华帖 (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();
			}
        }   
	}
0 请登录后投票
   发表时间:2010-10-28  
import java.util.concurrent.*

然后做该做的事情
oracle导数据还要写程序?
0 请登录后投票
   发表时间:2010-10-29  
cjmcn-sh 写道
import java.util.concurrent.*

然后做该做的事情
oracle导数据还要写程序?

我前面说了因为有xmltype类型的字段,所以想用java先解析一下再插入
0 请登录后投票
   发表时间:2010-10-29  
干吗不用join?没理解错的话就是主线程等着子线程们结束吧
0 请登录后投票
   发表时间:2010-10-29   最后修改:2010-10-29
yadsun 写道
nishizhutoua 写道
说句老实话,你确定你的这个需求要用多线程么?
读的方面,瓶颈在IO,用单线程,全速的读就是最快的了.除非你在读取一行数据后要对行数据进行格式化,并且这个格式化时间消耗要大于理论上的连续读两行文本时的CPU时间. 不过恐怕不容易吧,这两个时间差好几个级.
写的部分,瓶颈还是在IO,因为你要写到数据库中.
这么算两个线程就够了,生产者消费者模式即可.

假设有100万条记录,顺序执行的话光是遍历完这100万条记录就要很长时间了,现在开10个线程,每个线程只要插入10万条,是不是会快很多?


看你几块disk,只有一块的话单线顺序程读写就是最快了 磁盘是sequantial access才快的 多线程access pattern被打乱了会慢因为这相当于random access了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics