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
- JAVA进阶-多线程(4)
- Java进阶05 多线程
- JAVA进阶-多线程(1)
- JAVA进阶-多线程(2)
- JAVA进阶-多线程(3)
- java 多线程进阶
- Java进阶05 多线程
- Java进阶05 多线程
- Java进阶05 多线程
- Java进阶05 多线程
- java多线程进阶
- 掌握java多线程进阶
- Java进阶05 多线程
- Java之旅--多线程进阶
- Java进阶(四十一)多线程讲解
- Java并发多线程进阶-1
- Java基础进阶_day15_(多线程)
- Java 多线程编程 wait()、notify() -- JAVA 进阶
- Git使用之Permission Denied问题解决
- java缓存
- 15个初学者必看的基础SQL查询语句
- MySQL触发器
- long和int
- JAVA进阶-多线程(4)
- poj 3601 Tower of Hanoi
- ExtJS3.4 xtype:'displayfield' 无法解析换行
- php字符串处理
- shell简介(下)
- iOS开发之new与alloc/init的区别
- [C++11]C++11带来的随机数生成器
- 不可恢复的NOLOGGING 数据库对象
- JAVA笔记 之 JDK新特性