最近在研究多线程任务计算可以有返回值,所以写了一个简单多线程任务计算的demo,代码如下:
package thread; import java.util.ArrayList; import java.util.List; import java.util.Random; 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; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class DuoRenWuJiSuanTest { public static void main(String[] args) throws Exception { long startTime = System.currentTimeMillis(); // 创建任务集合 List<FutureTask<Integer>> taskList = new ArrayList<FutureTask<Integer>>(); // 创建线程池 ExecutorService exec = Executors.newFixedThreadPool(5); for (int i = 0; i < 10; i++) { // 传入Callable对象创建FutureTask对象 FutureTask<Integer> ft = new FutureTask<Integer>(new ComputeTask(i+"")); taskList.add(ft); // 提交给线程池执行任务,也可以通过exec.invokeAll(taskList)一次性提交所有任务; exec.submit(ft); } System.out.println("所有计算任务提交完毕, 主线程接着干其他事情!"); // 开始统计各计算线程计算结果 Integer totalResult = 0; for (FutureTask<Integer> ft : taskList) { try { //FutureTask的get方法会自动阻塞,直到获取计算结果为止 totalResult = totalResult + ft.get(); // totalResult = totalResult + ft.get(1000,TimeUnit.MILLISECONDS);//等待一秒获取结果,子线程没有执行完则抛出异常 } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } long endTime = System.currentTimeMillis(); // 关闭线程池 exec.shutdown(); System.out.println("多任务计算后的总结果是:" + totalResult+";话费时间:"+(endTime-startTime)); } } class ComputeTask implements Callable<Integer> { private Integer result = 0; private String taskName = ""; public ComputeTask(String taskName){ this.taskName = taskName; System.out.println("生成子线程计算任务: "+taskName); } public String getTaskName(){ return this.taskName; } @Override public Integer call() throws Exception { for (int i = 1; i <= 100; i++) { result += i; } // 休眠5秒钟,观察主线程行为,预期的结果是主线程会继续执行,到要取得FutureTask的结果是等待直至完成。 Thread.sleep(new Random().nextInt(5000)); System.out.println(Thread.currentThread().getName()+"子线程计算任务: "+getTaskName()+" 执行完成!"); return result; } }
代码的核心就是创建List<FutureTask<Integer>> 进行线程任务的计算结果的接收。然后再循环使用futureTask.get()方法来进行结果的获取。要注意的是get方法会阻塞主线程,所以主线程会等待所有线程的计算结果完成之后在进行求和处理。一定要注意的是 FutureTask是Future接口的实现类
相关推荐
在这个“多线程多任务下载软件.zip”压缩包中,包含的是一个易语言项目的源码,可以作为学习和参考的实例。下面将详细解释多线程和多任务下载的概念,以及如何在易语言中实现这些功能。 1. **多线程技术**:在...
在易语言中,多线程任务分配模块是实现并发处理的关键组件,尤其适用于处理耗时操作或者提高程序执行效率。本模块的源码提供了一个简单而实用的多线程解决方案。 首先,我们要理解什么是多线程。在计算机科学中,...
在C++编程中,多线程技术是一种提升程序性能的有效方式,特别是在计算密集型任务中,如求解圆周率(PI)。这个项目名为“C++ 多线程求PI”,其目标是利用多线程并行计算来提高求解PI的效率。Word文档中的思路可能...
多线程计算是一种在计算机程序中同时执行多个线程(执行序列)的技术,它能够充分利用现代多核处理器的计算能力,提高程序的并发性和效率。在处理大量数据、实时响应或者进行复杂运算时,多线程是不可或缺的工具。...
测试代码应该包含调用`time()`方法,传递一个`ExecutorService`实例、并发度(`concurrency`)和要执行的`Runnable`任务,以验证该方法是否正确计算了多线程环境下的执行时间。 总的来说,`CountDownLatch`是Java...
在IT领域,多线程计算是一种利用多个处理器核心或线程并行处理任务的技术,能够显著提高计算效率,尤其在需要进行大量计算的任务中,如计算圆周率π的值。"多线程计算pi(精确到多位)"这个项目正是基于这样的理念,...
在“content.txt”文件中,可能包含了具体的易语言多线程编程示例代码,通过分析和学习这些代码,我们可以更好地理解如何在易语言环境中实现和管理多线程任务。对于初学者而言,这是一份宝贵的资源,可以加深对多...
此外,多线程还能提高用户体验,例如,一个线程处理用户界面更新,另一线程则负责后台数据计算,避免了用户界面的卡顿。 二、Java中的多线程实现 1. 继承Thread类:创建一个新的类,继承自Thread类,重写run()方法...
在计算机科学中,多线程和线程池是并发编程中的关键概念,它们极大地提高了程序的执行效率,尤其是在处理大量计算任务时。本主题将详细探讨单线程、多线程以及线程池,并结合计算随机数的一价和来阐述这些概念的实际...
在IT领域,多线程是一种常见且强大的编程技术,它允许多个任务同时执行,以提高程序的效率和响应速度。在Linux系统中,`pthread`库是C和C++编程语言实现多线程的标准接口。本文将深入探讨标题和描述中提到的...
在Qt框架中,多线程处理多任务是提高应用程序性能和响应能力的重要手段。Qt提供了丰富的多线程支持,使得开发者能够充分利用现代计算机的多核处理器资源,避免UI线程因执行耗时操作而导致的界面假死问题。本文将深入...
标题中的“Arduino 使用多线程例子”意味着我们将探讨如何在Arduino平台上实现多任务并行处理。通常,Arduino基于单片机,不直接支持操作系统或内置的多线程机制。但是,通过巧妙编程和使用库,我们可以模拟多线程的...
而利用多线程,我们可以将这个任务分解成多个小任务,每个线程负责计算矩阵的一部分,从而充分利用现代多核处理器的并行计算能力,显著提高效率。 在Java中实现多线程矩阵乘法,首先需要创建一个线程池,例如使用`...
在计算机编程中,多线程和多任务是提高应用程序效率和响应能力的重要技术。本文将深入探讨如何在C++环境中,特别是在MFC(Microsoft Foundation Classes)框架下实现多线程多任务。 首先,理解“多线程”和“多任务...
标题中的"通过多线程任务处理大批量耗时业务并返回结果"指的是在Java或其他支持多线程的编程语言中,如何有效地分配工作到多个线程,以便同时处理大量任务,并在任务完成后收集和处理结果。 描述中提到的"当监测到...
在C#编程中,多线程和多任务管理是一个关键的概念,它允许程序同时执行多个独立的任务,提高程序的响应速度和效率。本压缩包文件"**C#多线程多任务管理模型**"提供了相关的代码示例和项目资源,帮助开发者深入理解和...
多线程则允许多个任务同时运行,主线程负责UI交互,而其他线程负责后台计算,从而提高效率并保持UI的响应性。在C#中,可以使用`System.Threading`命名空间下的`Thread`类或者`Task`类来创建和管理线程。 接下来是...
在矩阵相乘中,多线程的使用通常是为了将大任务分解为小任务,然后分配给不同的线程进行计算,从而提高计算速度。例如,一个500x500的矩阵乘法可以被划分为25000个小的2x2矩阵相乘,这些小任务可以并行执行。这里,...