1.Fork/Join框架是Java 7并行执行任务的框架,是一个把大任务分割成若干个小任务,每个小任务结果后得到大任务结果的框架
2.工作窃取算法:是指某个线程从其他队列里窃取任务来执行
3.工作窃取算法的优点:充分利用线程进行并行计算,减少了线程间的竞争。
工作窃取算法的缺点:在某些情况下还是存在竞争,比如双端队列里只有一个任务时。并且该算法会消耗了更多的系统资源。
4.
步骤1 分割任务。首先我们需要有一个fork类来把大任务分割成子任务,有可能子任务还是很大,所以还需要不停地分割,直到分割出的子任务足够小。
步骤2 执行任务并合并结果。分割的子任务分别放在双端队列里,然后几个启动线程分别从双端队列里获取任务执行。子任务执行完的结果都统一放在一个队列里,启动一个线程从队列里拿数据,然后合并这些数据。
5.可以继承的类
RecursiveAction:用于没有返回结果的任务。
· RecursiveTask:用于有返回结果的任务
6.循环的方法compute()注意写跳出条件
7.拆分和合并的方法
// 执行子任务
对象.fork();
对象.fork();
// 等待子任务执行完,并得到其结果
int m=对象.join();
int n=对象.join()
8.ForkJoinTask提供了isCompletedAbnormally()方法来检查任务是否已经抛出异常或已经被取消了,通过ForkJoinTask的getException方法获取异常。getException方法返回Throwable对象,如果任务被取消了则返回CancellationException。任务没有完成或者没有抛出异常则返回null