在之前我学习了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. java开发环境配置——IntelliJ IDEA

    关于开发工具,之前是用eclipse,后来用了一段时间idea后,发现idea比eclipse好用太多了,所以推荐大家用idea 官网下载地址:https://www.jetbrains.com/id ...

  2. Laravel Excel 实现 Excel-CSV 文件导入导出功能

    Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...

  3. float浮动-清浮动BFC渲染机制

    float浮动,用于横向布局. 起初的横向布局都用display:inline-block,但是这会导致两个元素之间有空隙,而这是由代码换行解析成空格的,解决元素间有空隙,空格:font-size:0 ...

  4. android集成twitter登录

    Twitter曾经举行了自己四年以来的第一场开发者大会.而这场名为“Flight”的大会,也是以后它的年度惯例. 这次大会的主题也完全围绕开发者进行.大会的焦点是一个名叫Fabric的新SDK,里面包 ...

  5. C#设置电脑时间帮助类

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  6. win10系统电脑常用基本操作快捷键

    win:开始 ==  ctrl + ESC :开始菜单 win + X: 开始菜单 win + i : 控制面板 win + L:快速锁屏 win +A:操作中心 win+Tab 时间轴(1803版本 ...

  7. Python二次编码、小数据池之心照神交

    二次编码.解码.小数据池: encode(str:编码):参数编码方式,返回字节码. str_1 = "编码" str_2 = str_1.encode("utf-8&q ...

  8. 【原】Java学习笔记002 - JAVA SE编码规范

    /* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...

  9. Linux Shell 返回值之 PIPESTATUS

    BASH SHELL中,通常使用 $? 来获取上一条命令的返回码,对于管道中的命令,使用$?只能获取管道中最后一条命令的返回码,例如: 下面的例子 /djdjal/dajiojidksj.file是一 ...

  10. java实现简单的solr查询

    SolrQuery类是实现solr查询的类. @Test public void testSelect() { String url = "http://localhost:8081/sol ...