在之前我学习了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的更多相关文章

  1. 4月11日java多线程4

    继昨天学习了线程池之后,今天学习了多线程内的锁Lock. 定义方法: ReentrantLock queueLock = new ReentrantLock(); //可重入锁 ReentrantRe ...

  2. 4月10日java上机任务

    1. 一维数组的创建和遍历. 声明并创建存放4个人考试成绩的一维数组,并使用for循环遍历数组并打印分数.要求: (1)    首先按“顺序”遍历,即打印顺序为:从第一个人到第四个人: (2)    ...

  3. [网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断

    大家好,阿里云将于3月10日23:00-4:00对负载均衡服务(SLB)做升级操作,升级期间SLB网络连接会有约4-8次闪断.由此给您带来麻烦,敬请谅解! 阿里云SLB升级公告内容如下: 尊敬的用户: ...

  4. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  5. 2016年12月10日 星期六 --出埃及记 Exodus 21:5

    2016年12月10日 星期六 --出埃及记 Exodus 21:5 "But if the servant declares, `I love my master and my wife ...

  6. 2016年11月10日 星期四 --出埃及记 Exodus 20:1

    2016年11月10日 星期四 --出埃及记 Exodus 20:1 And God spoke all these words: 神吩咐这一切的话说,

  7. 2014年7月10日,我人生的最重要Upgrade

    2014年7月10日上午,我的小公主顺利的出生于国妇婴.之前各种紧张,各种不安.在不安中的前天晚上陪着来上海的董博士于方先生在人民广场聚餐.大家都是工作几年的,各种感慨,对于工作中的零零种种.还有对未 ...

  8. 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发

    ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...

  9. 成都Uber优步司机奖励政策(4月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

随机推荐

  1. 委托(2).net 1.x中的委托

    上一篇已经演示了使用委托实现一个多语言问候的程序,这一篇文章来总结一下在.net 1.x中委托的使用方法. 既然委托是一个类型(class),那么它就要经历像类一个先声明,然后new一个对象,最后调用 ...

  2. JavaScript面试总结(一)

    (一).call,apply,bind 的用法与区别? 答案:摘自:https://www.cnblogs.com/Jade-Liu18831/p/9580410.html(总结的特别棒的一篇文章) ...

  3. java程序员学C#

    因为工作需要,我要学习C#,其实我觉得不错,我喜欢了解更多的语言,因为这对我今后的发展很有帮助,毕竟技多不压身,下面是我今天学习后总结C#的基本语法: 我曾经学过C,而且又是java程序员,所以对我来 ...

  4. 引入UEditor后其他列表项不显示

    最近在做的一个后台管理系统,发现一个bug: 问题描述:如果其他列表项都用类为col-xs-12的div包裹,而引入UEditor的部分不用类为col-xs-12的div包裹,那么其他列表项将无法显示 ...

  5. Dynamics 365权限变化大部署后需要注意什么?

    本人微信公众号:微软动态CRM专家罗勇 ,回复292或者20190110可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 如果 ...

  6. ASP.NET Core 一步步搭建个人网站(1)_环境搭建

    ASP.NET Core2.0发布有一阵子了,这是.NET 开源跨平台的一个重大里程碑, 也意味着比1.0版本要更加成熟.目前.net core具有开源.跨平台.灵活部署.模块化架构等等特性,吸引着一 ...

  7. Kafka相关内容总结(Kafka集群搭建手记)

    简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是 ...

  8. 前后端分离djangorestframework—— 接入第三方的验证码平台

    关于验证码部分,在我这篇文章里说的挺详细的了:Python高级应用(3)—— 为你的项目添加验证码 这里还是再给一个前后端分离的实例,因为极验官网给的是用session作为验证的,而我们做前后端分离的 ...

  9. 如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量

    概述: 本地化是系统或软件运行的语言和文化环境.设置NLS_LANG环境参数是规定Oracle数据库软件本地化行为最简单的方式. NLS_LANG参数不但指定了客户端应用程序和Oracle数据库所使用 ...

  10. SQLServer之CHECK约束

    CHECK约束添加规则 1.CHECK 约束用于限制列中的值的范围. 2.Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Ch ...