JAVA进阶-多线程(4)

来源:互联网 发布:网络食品安全违法 编辑:程序博客网 时间:2024/05/13 08:18

分支/合并框架


ForkJoinPool维护一个线程池,当调用ForkJoinPool对象的invoke()方法时,将任务分发给ForkJoinTask执行。

ForkJoinTask具体是执行任务的类,一般我们使用其子类,当需要返回值时,使用RecursiveTask;不需要返回值

则使用RecursiveAction,在执行子任务的时候,执行 compute方法,注意,在调用invoke方法完成的时候会形成阻塞

,调用者后面的代码会等待invoke执行完后再执行。

--------------

SplitNumCaculateSample>分步获取所有数组的和

/** * * * @author Lean  @date:2014-10-7   */public class SplitNumCaculateSample {public static int[] num={10,50,20,100,10};public static final int THRESHOLD=5;public static void main(String[] args) {ForkJoinPool pool=new ForkJoinPool(Runtime.getRuntime().availableProcessors());pool.invoke(new SortTask(num));}static class SortTask extends RecursiveAction{private static final long serialVersionUID = 1L;private int[] mCalculateNum;public SortTask(int[] calculateNum){mCalculateNum=calculateNum;}@Overrideprotected void compute() {if (mCalculateNum.length>2) {int[] lastArray=new int[mCalculateNum.length-2];for (int i = 2; i < mCalculateNum.length; i++) {lastArray[i-2]=mCalculateNum[i];}invokeAll(new SortTask(new int[]{mCalculateNum[0],mCalculateNum[1]}),new SortTask(lastArray));merge(mCalculateNum);}else {merge(mCalculateNum);}}}private static void merge(int[] mCalculateNum){int sum=0;for (int i : mCalculateNum) {sum+=i;}System.out.println("sum is:"+sum);}}
--------------


线程安全集合
List<E> syncArrayList=Collections.synchronizedList(new ArrayList());
Map<K,V>syncHashMap=Collections.synchronizedMap(new HashMap<K,V>());
5.0
ConcurrentHashMap,ConcurrentSkipListMap,
ConcurrentSkipSet,ConcurrentLinkedQueue;
7.0
ConcurrentLinkedDeque;ThreadLocalRandom


Thread.ThreadLocals>该类其实是一个包装类,由每条线程保存的一个副本,其包装了
map的键值对.总的来说ThreadLocals是Thread里面的一个对象,当我们创建一个ThreadLocal
对象的时候,把自己和存储值作为map放进Thread中,作为Thread.ThreadLocals对象的引用.
所有每个对象都有自己的ThreadLocals,每个ThreadLocals都存放着线程唯一的map.
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗的腿关节断了怎么办 狗狗的腿断了怎么办 扁桃体发炎长白色的东西怎么办 十几年旧伤复发怎么办 被撞当天没报警怎么办 90后欠30万债务怎么办 赌博输了钱后悔怎么办 借赌博输了80万怎么办 赌博输了50万怎么办 手机赌博输了钱怎么办 内存卡是扩容卡怎么办 坐了过山车想吐怎么办 坐完摇椅想吐怎么办 玩完过山车想吐怎么办 做了过山车想吐怎么办 坐车后恶心想吐怎么办 太胖了想减肥怎么办 被集资诈骗的人怎么办 教了作业没写怎么办 移动4g网速慢怎么办 小孩装病不去上学怎么办 卖衣服顾客嫌贵怎么办 当顾客说再看看怎么办 读完高中没考上大学怎么办 手抖不会写字了怎么办 字认识写不出来怎么办 八四把衣服发黄怎么办 孩孑在学校被打怎么办 在学校有人打我怎么办 孩子在学校不爱说话怎么办 孩子上幼儿园不和小朋友玩怎么办 遇到有人要打你怎么办 被表白了怎么办神回复 学校要发展我该怎么办 如果有人要打你怎么办 梦见有人要杀我怎么办 如果有人要杀我怎么办 梦到有人要杀我怎么办 感觉有人要杀我怎么办 我很自卑 没自信怎么办 如果在学校被打怎么办