zoukankan      html  css  js  c++  java
  • Java多线程之利用线程池并行计算例子

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 import java.util.concurrent.*;
     4 import java.util.concurrent.Callable;
     5 import java.util.concurrent.ExecutorService;
     6 import java.util.concurrent.Executors;
     7 import java.util.concurrent.Future;
     8 
     9 /**
    10  * 并行计算例子
    11  * nasa
    12  */
    13 public class ParallelComputing {
    14 
    15     public static void main(String[] args) {
    16 
    17         long startTime = System.currentTimeMillis();
    18         List<Integer> results = getPrime(1, 200000);
    19         long endTime = System.currentTimeMillis();
    20         System.out.println("耗时:" + (endTime -startTime));
    21 
    22         final int cpuCoreNum = 4;
    23 
    24         ExecutorService service = Executors.newFixedThreadPool(cpuCoreNum);
    25 
    26         MyTask t1 = new MyTask(1, 80000);
    27         MyTask t2 = new MyTask(80001, 130000);
    28         MyTask t3 = new MyTask(130001, 170000);
    29         MyTask t4 = new MyTask(170001, 200000); //为什么不平均分 和质数计算速度有关
    30 
    31         Future<List<Integer>> s1 = service.submit(t1);
    32         Future<List<Integer>> s2 = service.submit(t2);
    33         Future<List<Integer>> s3 = service.submit(t3);
    34         Future<List<Integer>> s4 = service.submit(t4);
    35 
    36         startTime = System.currentTimeMillis();
    37         try {
    38             System.out.println(s1.get());
    39             System.out.println(s2.get());
    40             System.out.println(s3.get());
    41             System.out.println(s4.get());
    42         } catch (InterruptedException e) {
    43             e.printStackTrace();
    44         } catch (ExecutionException e) {
    45             e.printStackTrace();
    46         }
    47         endTime = System.currentTimeMillis();
    48         System.out.println("耗时:" + (endTime - startTime));
    49         service.shutdown();
    50     }
    51 
    52     static class MyTask implements Callable<List<Integer>> {
    53 
    54         int startPos, endPos;
    55 
    56         MyTask(int start, int end) {
    57             this.startPos = start;
    58             this.endPos = end;
    59         }
    60 
    61         @Override
    62         public List<Integer> call() throws Exception {
    63             List<Integer> result = getPrime(startPos, endPos);
    64             return result;
    65         }
    66     }
    67 
    68     /**
    69      * 判断是不是素数或质数
    70      * @param num
    71      * @return
    72      */
    73     static boolean isPrime(int num) {
    74         for (int i=2; i<=num/2; i++) {
    75             if(num % i == 0) return false;
    76         }
    77         return true;
    78     }
    79 
    80     /**
    81      * 给一个范围判断这个范围内有多少个质数
    82      * @param start
    83      * @param end
    84      * @return
    85      */
    86     static List<Integer> getPrime(int start, int end) {
    87         List<Integer> results = new ArrayList<>();
    88         for (int i=start; i<=end; i++) {
    89             if(isPrime(i)) results.add(i);
    90         }
    91         return results;
    92     }
    93 
    94 }
  • 相关阅读:
    centos7与centos6区别
    tomcat在win10系统中安装失败的问题,修改tomcat内存
    centos7关闭防火墙
    Centos7安装FastDFS教程
    Maven详解(四)------ 常用的Maven命令
    Linxu程序构建-Makefile
    版本控制工具-git
    Linux程序调试-常用调试技巧
    Linux工具-编写手册页&发行软件&RPM软件包
    Linux终端-对终端进行读写
  • 原文地址:https://www.cnblogs.com/mxh-java/p/12244321.html
Copyright © 2011-2022 走看看