java 并发编程-主线程等待多个子线程

话说实现线程有两种方式,这个大家想必都知道吧,一个是实现Runnable接口,实现run方法,一个是继承Thread类,重写run方法,实现Runnable接口,还是需要包装到new Thread(runnable).start()来调用这个线程。我这里用继承Thread这种方式来介绍一下吧,因为业务需要,需要使用多线程来提高效率。

public class MyThread extends  Thread{
    private String para;
    private String result;
   
    public CameraThread(String para) 
   {
        this.para=para;
    }

    public String getResult() {
        return result;
    }

    @Override
    public void run() {
        result = execute(para);//自己定义的方法
    }
}

实现主线程等待多个子线程可以使用sleep、join、CountDownLatch、CycleBarrier。众所周知,sleep()当前线程进入阻塞状态,指定时间后,解除阻塞,进入就绪状态,所以我觉得sleep不是很好控制,后面三种比较好用,具体你想用哪一种,就看你的业务场景吧!我这里介绍一下join这种方式吧!join()是阻塞指定线程,等到另一个线程完成后继续执行。

 

           Vector<Thread> threads = new Vector<Thread>();//vector保证线程安全
          for (int i=0;i<5;i++) {
           
                MyThread myThread = new MyThread();
                threads.add(myThread);//添加子线程
                myThread.start();
            }
            //主线程等待子线程结束任务
            for (Thread th:threads) {
                try {
                    th.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

如果业务场景是主线程等待多个子线程执行,Runnable和Thread这个两种线程实现方法各有优缺点吧!Runnable无法获取线程运行结束的结果,而Thread可以获取成员变量来得到运行后的结果。

▄█▀█●老铁,站住!别跑,我又不收你钱,如果我的demo能够帮助到你,请给我一个赞吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值