怎么在Java中使用线程计算数组和

  介绍

怎么在Java中使用线程计算数组和?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


五个线程交替累加计算数组之和,这种方法其实不如单线程直接累加快,因为交替累加需要前一个线程计算的结果。

package 测试;   ,   import  java.util.concurrent.ExecutorService;   import  java.util.concurrent.Executors;   ,   public  class  FiveThreadCount  {   ,private  int 数=0;   ,private  int [], arr={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12日,13日,14日,15日,16日,17日,18日,19日,20日,21日,22日,23日,24日,25日,26日,27日28日};   ,private  int  j=0;   ,//定义一个任务,关键点所在   ,private  class  MyThread  extends 线程{   @Override才能   public 才能;void 运行(),{   ,,super.run ();   ,,,,(j=arr.length) {   ,,,,,,返回;   ,,,,,}   ,,,,,计数+=arr [j + +);   ,,,,,try  {   ,,,,,,thread . sleep (100);   ,,,,,},catch  (InterruptedException  e), {   ,,,,,,//,TODO  Auto-generated  catch 块   ,,,,,,e.printStackTrace ();   ,,,,,}   ,,,,,System.out.println (Thread.currentThread () . getname ());   ,,,,}   ,,,}   ,,}   ,}   ,   ,//方法一   ,public  void  test1 () {   ,,(int 我=0;i<5,我+ +){   ,,new  MyThread () .start ();   ,,}   ,,,,,,,try  {   ,,thread . sleep (10000);   ,,},catch  (InterruptedException  e), {   ,,//,TODO  Auto-generated  catch 块   ,,e.printStackTrace ();   ,,}   ,,,,,,,System.out.println(数);   ,}   ,//方法二   ,public  void  test2 () {   Thread 才能myThread=new  myThread ();   ,,(int 我=0;i<5,我+ +){   ,,new 线程(myThread) .start ();   ,,}   ,,,,,,,try  {   ,,thread . sleep (10000);   ,,},catch  (InterruptedException  e), {   ,,//,TODO  Auto-generated  catch 块   ,,e.printStackTrace ();   ,,}   ,,,,,,,System.out.println(数);   ,}   ,//方法一的线程池实现版   ,public  void  test3 () {   ExecutorService 才能;服务=Executors.newCachedThreadPool ();   ,,(int 我=0;i<5,我+ +){   ,,service.execute (new  MyThread ());   ,,}   ,,,,,,,try  {   ,,thread . sleep (10000);   ,,},catch  (InterruptedException  e), {   ,,//,TODO  Auto-generated  catch 块   ,,e.printStackTrace ();   ,,}   ,,,,,,,System.out.println(数);   ,}   ,//方法二的线程池实现版   ,public  void  test4 () {   ExecutorService 才能;服务=Executors.newCachedThreadPool ();   Thread 才能myThread=new  myThread ();   ,,(int 我=0;i<5,我+ +){   ,,service.execute (myThread);   ,,}   ,,,,,,,try  {   ,,thread . sleep (10000);   ,,},catch  (InterruptedException  e), {   ,,//,TODO  Auto-generated  catch 块   ,,e.printStackTrace ();   ,,}   ,,,,,,,System.out.println(数);   ,}   ,   }

上边代码中,用到了睡眠方法的原因,睡眠(100)是为了让其他线程有时间执行任务,如果不睡眠的话,有可能一个线程就全部执行完了。最后的睡眠(10000)是为了等所有线程执行完后,打印最后的计算结果只

代码二:

将数组分等为5分,让每个线程计算自己负责的那份,并发计算,最后汇总结果。这种方式比代码一速度会快些,因为线程独立计算,不依赖其他线程的结果。最后几个线程将总数累加即可。

方式一:

使用可调用,FutureTask方式,来实现代码:

package 测试;   ,   import  java.util.concurrent.Callable;   import  java.util.concurrent.ExecutionException;   import  java.util.concurrent.ExecutorService;   import  java.util.concurrent.Executors;   import  java.util.concurrent.FutureTask;   ,   public  class  FiveThreadCount2  {   ,private  int [], arr={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12日,13日,14日,15日,16日,17日,18日,19日,20日,21日,22日,23日,24日,25日,26日,27日28日};   ,private  int 总=0;   ,public  void 测试(),throws  InterruptedException, ExecutionException {   ExecutorService 才能;服务=Executors.newFixedThreadPool (5);   int 才能;长度=arr.length;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Java中使用线程计算数组和