并发执行任务
2018-09-10 01:02:46来源:博客园 阅读 ()
并发执行任务
1 import java.util.concurrent.ExecutionException; 2 import java.util.concurrent.ForkJoinPool; 3 import java.util.concurrent.ForkJoinTask; 4 import java.util.concurrent.RecursiveTask; 5 6 /** 7 * 并发执行任务 8 */ 9 public class CountTask extends RecursiveTask<Integer> { 10 11 private static final long serialVersionUID = 1L; 12 private static final int THRESHOLD = 2; //阈值 13 private int start; 14 private int end; 15 16 public CountTask(int start,int end) { 17 this.start = start; 18 this.end = end; 19 } 20 21 @Override 22 protected Integer compute() { 23 int sum = 0; 24 //如果任务足够小就计算任务 25 boolean canCompute = (end - start) <= THRESHOLD; 26 if(canCompute) { 27 for (int i = start; i <= end; i++) { 28 sum += i; 29 } 30 }else { 31 //如果任务大于阈值 就分裂成两个子任务计算 32 int middle = (start + end) / 2; 33 CountTask leftTask = new CountTask(start, middle); 34 CountTask rightTask = new CountTask(middle + 1, end); 35 leftTask.fork(); 36 rightTask.fork(); 37 //等待子任务执行完成 并得到其结果 38 int leftResult = leftTask.join(); 39 int rightResult = rightTask.join(); 40 //合并子任务 41 sum = leftResult + rightResult; 42 } 43 return sum; 44 } 45 46 public static void main(String[] args) { 47 ForkJoinPool forkJoinPool = new ForkJoinPool(); 48 //生成一个计算任务,负责计算1+2+3+4 49 CountTask task = new CountTask(1,4); 50 //执行一个任务 51 ForkJoinTask<Integer> result = forkJoinPool.submit(task); 52 try { 53 System.out.println(result.get()); 54 } catch (InterruptedException e) { 55 e.printStackTrace(); 56 } catch (ExecutionException e) { 57 e.printStackTrace(); 58 } 59 } 60 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 那些面试官必问的JAVA多线程和并发面试题及回答 2020-05-28
- 【JavaSE】多线程与并发编程(总结) 2020-05-25
- Java并发编程volatile关键字 2020-05-24
- Java并发学习笔记 线程篇 2020-05-24
- 还搞不定Java多线程和并发编程面试题?你可能需要这一份书单 2020-05-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash