java Fork/join 初探
2016-01-07 11:58
477 查看
java7提供的forkJoinTask用多线程的方式处理可以用分治法解决的问题。
首先看一下forkJoinTask类的继承关系,在forkJoinTask中比较重要的两个类是RecursiveAction(没有返回值的线程父类)和RecursiveTask(有返回值的线程父类)。
在编写forkJoinTask类时要根据需要继承这两个类。编写完类后,创建ForkJoinPool这个线程池,实例化多线程对象,提交并启动多线程就可以了。
更详细的内容可以参考/article/8322814.html
首先看一下forkJoinTask类的继承关系,在forkJoinTask中比较重要的两个类是RecursiveAction(没有返回值的线程父类)和RecursiveTask(有返回值的线程父类)。
在编写forkJoinTask类时要根据需要继承这两个类。编写完类后,创建ForkJoinPool这个线程池,实例化多线程对象,提交并启动多线程就可以了。
package com.Executor.test; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveAction; import java.util.concurrent.TimeUnit; public class ForkJoinPoolTest { static class PrintTask extends RecursiveAction { /** * */ private static final long serialVersionUID = 1L; private static final int THRESHOLD = 50; private int start; private int end; public PrintTask(int start, int end) { this.end = end; this.start = start; } @Override protected void compute() { if (end - start < THRESHOLD) { for (int i = start; i < end; i++) { System.out.println(Thread.currentThread().getName() + " ::i=" + i); } } else { int middle = (start + end) / 2; PrintTask left = new PrintTask(start, middle); PrintTask right = new PrintTask(middle, end); left.fork(); right.fork(); } } } public static void main(String[] args) throws InterruptedException { System.out.println(Runtime.getRuntime().availableProcessors()); ForkJoinPool pool = new ForkJoinPool(); pool.submit(new PrintTask(0, 500)); pool.awaitTermination(2, TimeUnit.SECONDS); pool.shutdown(); } }
更详细的内容可以参考/article/8322814.html
相关文章推荐
- Spring事务配置的五种方式
- hashcode方法浅析
- java中文转byte数组
- java集合-Map
- Java 日期格式和String 转换
- java 命令
- JAVA学习【3】对JAVA值传递的理解
- Java HashMap工作原理【图文版】
- Java注释Override、Deprecated、SuppressWarnings详解
- 将java开发的wordcount程序部署到spark集群上运行
- JavaEE_SSM_Mybatis Mybatis 学习指南
- Java权限基础
- JAVA反射机制之一
- java 类加载器(class loader)深入探讨
- 设计模式-责任链模式(Java)
- 2 Maven-安装和配置
- eclipse相关知识点
- WIN10 Eclipse LUNA的JDK配置
- Spring定时任务的几种实现--推荐spring task
- 搭建struts2环境