4月10日java多线程3
在之前我学习了java中的Thread 来实现多线程,今日我学习了ThreadGroup、Executor框架、ForkJoin框架。Executor 和ForkJoin都可以直接定义线程池,可以根据自己的需要自动增加线程多少,也可以自己设置固定的多少线程。
ForkJoin框架我大概认为的意思就是将一个大的任务,用二分法一直分解到一个个的特别小的任务再去执行线程进行计算,然后再将结果一起整合起来。
最近学的东西都比较难(主要是单词难记)还要更加的花心思去学,还要经常复习,不然总是会忘的。
//以下是Executor的线程池创建方式
ThreadPoolExecutor pool = Executor.newCachedThreadPool();//这是自动增加减少线程的定义方式
ThreadPoolExecutor pool = Executor.newCachedThreadPool(5);//这是自已定义固定线程的定义方式
//以下是ForkJoin的线程池创建方式
ForkJoinPool pool = new ForkJoinPool();//这是自动增加减少线程的定义方式
ForkJoinPool pool = new ForkJoinPool();//这是自已定义固定线程的定义方式
就我个人而言 比较习惯ForkJoin的线程池创建方式
附今日敲打的代码:
import java.util.concurrent.RecursiveTask;
public class SumTask extends RecursiveTask<Long>{
private int start;
private int end;
public SumTask(int start , int end )
{
this.start = start ;
this.end = end;
}
//定义一个线程执行的大小
public static final int Threadhold = 5;
@Override
protected Long compute()
{
Long sum = 0L;
boolean canComputer = (end - start) <=Threadhold ;
//如果计算量小于等于5的话就直接进行求和
if(canComputer)
{
for(int i = start; i<=end; i++)
{
sum = sum + i ;
}
}
//如果不满足就将该任务分解成两个任务
else
{
int middle = (start + end )/2 ;
SumTask subtask1 = new SumTask(start , middle);
SumTask subtask2 = new SumTask(middle+1 , end);
invokeAll(subtask1 , subtask2);
//join方法会等待线程结束,如果没有结束会形成阻塞
Long sum1 = subtask1.join();
Long sum2 = subtask2.join();
sum = sum1 + sum2 ;
}
return sum;
}
}
import java.util.concurrent.*;
public class SumTest {
public static void main(String[] args) throws Exception {
//创建线程池
ForkJoinPool pool = new ForkJoinPool(5);
//创建任务
SumTask task = new SumTask(1 , 10000000);
//提交任务
ForkJoinTask<Long> result = pool.submit(task);
do {
System.out.println("此时有"+pool.getActiveThreadCount()+"个线程");
try {
Thread.sleep(50);
}catch(Exception e)
{
}
}while(!task.isDone());
System.out.println(result.get().toString());
}
}
4月10日java多线程3的更多相关文章
- 4月11日java多线程4
继昨天学习了线程池之后,今天学习了多线程内的锁Lock. 定义方法: ReentrantLock queueLock = new ReentrantLock(); //可重入锁 ReentrantRe ...
- 4月10日java上机任务
1. 一维数组的创建和遍历. 声明并创建存放4个人考试成绩的一维数组,并使用for循环遍历数组并打印分数.要求: (1) 首先按“顺序”遍历,即打印顺序为:从第一个人到第四个人: (2) ...
- [网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
大家好,阿里云将于3月10日23:00-4:00对负载均衡服务(SLB)做升级操作,升级期间SLB网络连接会有约4-8次闪断.由此给您带来麻烦,敬请谅解! 阿里云SLB升级公告内容如下: 尊敬的用户: ...
- 2015年12月28日 Java基础系列(六)流
2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流
- 2016年12月10日 星期六 --出埃及记 Exodus 21:5
2016年12月10日 星期六 --出埃及记 Exodus 21:5 "But if the servant declares, `I love my master and my wife ...
- 2016年11月10日 星期四 --出埃及记 Exodus 20:1
2016年11月10日 星期四 --出埃及记 Exodus 20:1 And God spoke all these words: 神吩咐这一切的话说,
- 2014年7月10日,我人生的最重要Upgrade
2014年7月10日上午,我的小公主顺利的出生于国妇婴.之前各种紧张,各种不安.在不安中的前天晚上陪着来上海的董博士于方先生在人民广场聚餐.大家都是工作几年的,各种感慨,对于工作中的零零种种.还有对未 ...
- 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...
- 成都Uber优步司机奖励政策(4月10日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
随机推荐
- Java开发笔记(十七)各得其所的多路分支
前面提到条件语句的标准格式为“if (条件) { /* 条件成立时的操作代码 */ } else { /* 条件不成立时的操作代码 */ }”,乍看之下仿佛只有两个分支,一个是条件成立时的分支,另一个 ...
- 修改tomcat的端口号
一.环境 tomcat7.0.notepad++(这个是一个文本编辑器,用记事本也可以) 二.修改方法 端口 第一步:找到tomcat7的conf目录下的 server.xml这个文件, ...
- 22、删除链表的倒数第N个节点
22.删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删 ...
- java日期 Calendar类的使用
举例: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public clas ...
- Python全栈开发之---redis数据库
1.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...
- SAP MM 根据采购订单反查采购申请?
SAP MM 根据采购订单反查采购申请? 前日微信上某同行发来一个message,说是想知道如何通过采购订单号查询到其前端的采购申请号. 笔者首先想到去检查采购订单相关的常用报表ME2L/ME2M/M ...
- 【Vue 2.x】计算属性
Vue对象,按照现在的学习进度,可以分为: 其中el代表作用的HTML元素: data代表el中的所有数据: methods代表el中所有元素上的事件: computed代表计算属性,用于计算data ...
- .NET和Java之争
这几天连续有多篇文章(详细文章列表在<.NET和Java之争一点随想>和<由优劣语言之争引起的思考>有写)诋毁.NET,这类文章我十几年前就看得多了,只不过十几年前是C和C++ ...
- 版本控制工具(SVN/Git)介绍
文章大纲 一.SVN介绍二.Git介绍三.IDEA使用SVN和Git四.总结五.参考文章 一.SVN介绍 1. SVN服务器搭建和使用 首先来下载和搭建SVN服务器,下载地址如下: http:// ...
- 测者的性能测试手册:快速安装LoadRunner Linux上的Generator
安装和初始化 安装包 上传Linux.zip(LoadRunner Generator for Linux.zip,后台回复loadrunner获取下载地址),然后通过如下命令: unzip Linu ...