您的位置:首页 > 其它

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

2016-10-07 16:31 141 查看
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);

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐