http://blog.csdn.net/qiujuer/article/details/34862469
有时候我们会遇到这样的问题:做一个大的事情可以被分解为做一系列相似的小的事情,而小的事情无非就是参数上有可能不相同而已!
此时,如果不使用线程,我们势必会浪费非常多的时间来完成整个大的事情,而使用线程的话将会存在这样的问题:
主线程启动所有子线程并发执行后主线程就直接返回了,导致外部函数判读整个大的事情完成了,但是实际上并没有完成!
针对以上情况我想我会采用多线程方式执行同时解决主线程等待子线程的问题。如图:

在这里我使用Java进行案例分析。
首先建立一个线程管理类,用于启动所有子线程和等待所有子线程完成,在这里不使用休眠一段时间后循环检测的方式(消耗CUP同时消耗时间,全部完成时间不够及时等缺点);而是使用等待临界值的方式。ThreadManager.java如下:
此类集成自:NotifyInterface接口,NotifyInterface是用于子线程通知主线程自己已经完成工作所用类,ThreadManager实例化时将传入一个int值,用于设置启动的子线程数,当然这里是为了简单介绍所以采用的这样的方式,实际情况可能更加复杂。
在实例化后 进入构造方法,此时将会启动子线程,启动后进入循环等待中,当检测到所有子线程完成时就退出循环,没有就将进入临界值等待,直到通过接口通知主线程完成时将会通知临界值一次,此时循环将会执行一次,如果不满足退出条件将继续等待临界值。直到满足为止。
NotifyInterface接口如下:
测试用的子线程ThreadDoThing.java如下:
此类继承自Thread类,可直接重写Run()方法完成所做工作!
在工作中,我使用了随机一个1s内的休眠来代替所做工作的时间,完成后调用接口通知完成。
测试方法如下:
测试结果:
实际情况可能更加复杂,甚至子线程下还有更多的子线程!
具体情况大家可以衍生考虑,检测是否全部返回也可以有多种方式甚至设置添加一个定时器之类的。
以后有时间画一个详细点的图!