线程解决:一个长度的30000的int数组,其中放随机数,利用多核的优势,求数组中元素的和

来源:互联网 发布:强力数据恢复软件官网 编辑:程序博客网 时间:2024/05/29 05:52
1.创建一个普通方法(带参)
2.通过构造方法将参数初始化
3.在run方法调用这个普通方法(创建线程)
4.通过传参重用这个普通方法,创建出自己所需要的线程数量!
实例:
package com.wu.threadDemo;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ManyThread implements Runnable{
 private int startNum;
 
 private int[] theRs = new int[5000];
 private static int[]theSum = new int[6];
 
 public ManyThread(int startNum1,int []theRs1)
 {
  this.startNum = startNum1;
  this.theRs = theRs1;
 }
 public int  sumRs(int startNum,int[] theRs)
 {
   int first = (startNum-1)*5000;
   int sum = 0;
  for(int i = first;i < first+5000;i++)
  {
   sum += theRs[i];
  }
  return sum;
 }
 @Override//创建线程
 public void run() {
  theSum[startNum-1] = sumRs(startNum, theRs);
  System.out.println("线程"+startNum +" :结果: "+theSum[startNum-1]);
 }
 
 public static void main(String[] args) {
  int[] myRs = new int[30000];
  for(int i = 0; i < myRs.length;i++)
  {
   myRs[i] = new Random().nextInt(30000);
  }
  //按需个数固定的线程:调用线程
  ExecutorService threadPool =  Executors.newFixedThreadPool(6);
  threadPool.submit(new ManyThread(1, myRs));
  threadPool.submit(new ManyThread(2, myRs));
  threadPool.submit(new ManyThread(3, myRs));
  threadPool.submit(new ManyThread(4, myRs));
  threadPool.submit(new ManyThread(5, myRs));
  threadPool.submit(new ManyThread(6, myRs));
  threadPool.shutdown();////关闭线程池,不中断运行中的线程,只防止新线程submit其中
  
  int allSum = 0;
  int allSum1 = 0;//验证结果
  for(int i = 0; i < 6; i++)
   allSum += theSum[i];
  System.out.println("所有结果和 :"+allSum);
  
  for(int i = 0; i < myRs.length;i++)
   allSum1 +=myRs[i];
  System.out.println("验证结果 :"+allSum1);
 }
}

0 0
原创粉丝点击