在之前我学习了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. Ubuntu16.04 安装ROS及其IDE

    一. ROS的安装 1. 进入ROS官方网站 http://wiki.ros.org/ 2. Install -> ROS Kinetic Kame -> Ubuntu 3. 详情可参考所 ...

  2. 【Linux】常用命令,持续更新

    Linux 一.linux的组成 内核,shell,文件系统,应用程序 二.linux目录结构 bin,sbin,home,root,boot,dev,etc,lib, 三.文件目录操作 ls,cd, ...

  3. 解决基于IIS的.net core HttpWebRequest 连接特别慢

    用的是HttpWebRequest 连接特别慢,查找原因发现 : 由 HttpWebRequest. Proxy  代理的原因导致 . 其实请求1秒就完成了,那15秒是用来等待默认proxy超时的…… ...

  4. css字体图标的使用方法

    提要:对于传统的一般用css雪碧(css sprite)来搞,目前大部分网站已经主要字体图标 ,利用font+css 或者font+html 来开发,今天总结了一下,记录之~ css sprite用背 ...

  5. Eclipse Ctrl+Space 无法工作的问题

    Window->preference->Keys 然后找到content Assist,然后重新设置为自己想要的Short cut 就好了

  6. python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)

    python多线程爬虫项目() 爬取目标:斗图啦(起始url:http://www.doutula.com/photo/list/?page=1) 爬取内容:斗图啦全网图片 使用工具:requests ...

  7. RMQ求LCA

    题目链接 rmq求LCA,interesting. 一直没有学这玩意儿是因为CTSC的Day1T2,当时我打的树剖LCA 65分,gxb打的rmq LCA 45分... 不过rmq理论复杂度还是小一点 ...

  8. 国外线下技术俱乐部建设(1) - Belgrade Python技术俱乐部2019-01-25活动感悟

    这是<国外线下技术俱乐部建设>系列文章之一.   虽然之前接触过Belgrade的.NET技术俱乐部,但是它最近活动要春节后了. 出于观摩别人是怎么搞线下社区的心态,还有自己也有在用Pyt ...

  9. 瞧一瞧!这儿实现了MongoDB的增量备份与还原(含部署代码)

    一 需求描述 我们知道数据是公司的重要资产,业务的系统化.信息化就是数字化.数据高效的存储与查询是系统完善和优化的方向,而数据库的稳定性.可靠性是实现的基础.高可用和RPO(RecoveryPoint ...

  10. python 实例四

    https://www.cnblogs.com/evablogs/p/6754981.html 题目:输入某年某月某日,判断这一天是这一年的第几天? 程序分析: 月份天数: 月份 天数 2 平年28天 ...