介绍
代码二:
方式一:
怎么在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中使用线程计算数组和