分支/合并框架
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;
}
@Override
protected 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.继承线程父类,自定义子类 2.子类中重写run方法,@override,里面放你像实现的功能 3.mian()函数中创建子类对象,MyThread my =
这本书对JAVA多线程进阶帮助非常之大而且详细、融会贯通、看了必定打通多线程任督二脉
人工智能-项目实践-多线程-java基础进阶。包括:socket,多线程,反射,servlet,动态代理等高级知识 java基础进阶。包括:socket,多线程,反射,servlet,动态代理等高级知识
来自B站 遇见狂神说
。
。
java进阶提高学习教程-13JVM与多线程
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
这套课程既可以作为从零基础开始...课程的主要内容涉及有JAVA基础课程、JAVA多线程与并发编程、数据库开发基础和进阶、Spring Framework、Spring进阶、Spring MVC框架、Spring boot、Java常用类库、Java异常处理等等
多线程(共44页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 17.网络编程(共42页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 18.类加载与反射(共25页).ppt
Java基础和Java进阶: 1、Junit使用流程 2、集合进阶(一) 3、集合框架(二) 4、Stream流 5、进阶测试 6、IO流 7、算法(部分) 8、多线程 9、网络编程 10、Java高级
java多线程基础知识练习题,选择题及代码题。适合初学者
共九章内容: 第 1 章 Java概述 第 2 章 Java语言基础 第 3 章 类的封装、继承和多态 第 4 章 接口、内部类和 Java API 基础 ...第 7 章 多线程 第 8 章 Applet 应用程序 第 9 章 输入/输出流和文件操作
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
中文名: 编程实践:Java进阶100例 原名: 编程实践:Java进阶100例 别名: Java 作者: 李相国等. 译者: 李相国等. 图书分类: 软件 资源格式: PDF 版本: 影印版 出版社: 李相国等. 书号: 9787111372370. 发行...
山西大学java进阶实验 实验1:代码 实验2:反射 实验3:泛型 实验4:注解 实验5:网络编程 实验6:多线程 实验7:序列化 实验8:数据库 实验9:Servlet 实验10:JSP 实验11:XML解析 实验12:单例模式与枚举
多线程实现案例(多兵种联合攻击防御塔程序),适合java进阶学习。
华师大陈良育老师为您讲解Java进阶课程中的多线程、网络、数据库等等
27天实现java从入门到进阶 第一天:语言环境 第二天:常量变量 第三天:流程控制 第四、五天:方法与数组 第六天:类 第七天:对象的出生 第八天:类与类继承 第九天:具体到抽象的升华 第10天:权限内部类包 第11天...
多线程(共44页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 17.网络编程(共42页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 18.类加载与反射(共25页).ppt