首先是执行算法的CALL
/**
* <dl>
* <dt><b>类功能概要</b></dt>
* <dd></dd>
* </dl>
* Version Date Company Developer Revise
* ------- ---------- --------- --------- ------
* pisv2.3.2 2012-02-24 yihaodian xiangqi create
*/
package com.yihaodian.pis.thread;
import java.util.concurrent.Callable;
/**
* @author yhd
*
*/
class Content implements Callable<Integer> {
public int data;
public Integer call() throws Exception {
data ++;
//此段可以表示用来执行其他耗时任务
Thread.sleep(5000l);
return data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
其次是执行这个计算的任务线程
/**
* <dl>
* <dt><b>类功能概要</b></dt>
* <dd></dd>
* </dl>
* Version Date Company Developer Revise
* ------- ---------- --------- --------- ------
* pisv2.3.2 2012-02-24 yihaodian xiangqi create
*/
package com.yihaodian.pis.thread;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author yhd
*
*/
public class TestCall {
/**
* <dl>
* <dt><b>方法功能概要</b></dt>
* <dd></dd>
* </dl>
*/
public Future<Integer> excute(Content content) {
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor executor = new ThreadPoolExecutor(50, 100, 1,
TimeUnit.MINUTES, workQueue,
new ThreadPoolExecutor.AbortPolicy());
return executor.submit(content);
}
}
最后是主类,内部类设定参数,得到计算后的数据
/**
* <dl>
* <dt><b>类功能概要</b></dt>
* <dd></dd>
* </dl>
* Version Date Company Developer Revise
* ------- ---------- --------- --------- ------
* pisv2.3.2 2012-02-24 yihaodian xiangqi create
*/
package com.yihaodian.pis.thread;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author yhd
*
*/
public class Test {
/**
* <dl>
* <dt><b>方法功能概要</b></dt>
* <dd></dd>
* </dl>
*/
public static void main(String[] args) {
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor executor = new ThreadPoolExecutor(50, 100, 1,
TimeUnit.MINUTES, workQueue,
new ThreadPoolExecutor.AbortPolicy());
class MainThread implements Runnable {
TestCall testCall = new TestCall();
@Override
public void run() {
try {
List<Future<Integer>> tasks = new ArrayList<Future<Integer>>();
for (int i = 0; i < 1000; i++) {
Content content = new Content();
content.setData(i);
tasks.add(testCall.excute(content));
}
//结束循环,开始得到结果
//状态用来标记任务完成的状态
int status = 0;
while (status != 2) {
status = 1;
for(Future<Integer> task : tasks) {
if (!task.isDone()) {
status = 0;
//等待任务都完成
Thread.sleep(1000l);
break;
}
if (status == 1 || status == 2) {
System.out.println(task.get());
status = 2;
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
MainThread mainThread = new MainThread();
executor.submit(mainThread);
}
}
最后得到的结果就是 你想要的 2
分享到:
相关推荐
在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...
在Qt框架中,多线程处理多任务是提高应用程序性能和响应能力的重要手段。Qt提供了丰富的多线程支持,使得开发者能够充分利用现代计算机的多核处理器资源,避免UI线程因执行耗时操作而导致的界面假死问题。本文将深入...
在IT行业中,多线程并行执行是一种常见的优化策略,特别是在处理大数据量或者需要高性能计算的任务时。"CountDownLatch" 和 "Thread" 是Java编程语言中实现多线程并行执行的关键工具,它们有助于提高程序的运行效率...
在IT领域,多线程并发执行任务是一种常见的优化策略,特别是在服务器端开发、实时系统以及高性能计算中。本文将深入探讨多线程并发执行任务的相关知识点,并基于提供的`MyThread.java`文件,来分析和理解如何在Java...
`CompletionService`通过`Future`接口返回每个任务的结果,使得我们可以在任务完成的瞬间得到结果,而无需等待所有任务执行完毕。这对于处理大批量任务并需要实时处理结果的场景非常有用。 在提供的`ThreadDemo`...
代码示例中,可能会包含创建`ExecutorService`、创建任务(可能是`Runnable`或`Callable`)、提交任务到线程池、等待所有任务完成(使用`shutdown()`和`awaitTermination()`)的流程。此外,可能还会涉及线程安全的...
在计算机科学中,多线程是一种程序设计技术,它允许应用程序同时执行多个不同的任务或子任务,从而提高系统的效率和响应速度。多线程在Java、C++、Python等编程语言中都有广泛的应用。本篇文章将深入探讨多线程执行...
在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的现代编程语言中。C#提供了丰富的多线程支持,使得开发者能够高效地利用多核处理器资源,提高程序的运行效率。本篇文章将深入探讨C#中的多线程执行...
标题中的“多个线程到达后才能执行某个任务,并且只能执行一次”指的是在多线程环境下,需要确保一个任务在所有等待线程都到达特定条件后才开始执行,并且这个任务在整个程序运行过程中只被执行一次。这通常涉及到...
在标题“WinForm C#多线程等待窗体”中,我们探讨的关键点是如何在进行耗时操作时创建一个等待窗体,让用户知道程序正在执行任务,并且不允许用户进行其他操作,直到任务完成。描述提到了“非托管资源”和...
在编程领域,多线程是一种常见且强大的技术,它允许应用程序同时执行多个任务,从而提高系统效率和响应性。在C#中,多线程的使用尤其广泛,尤其是在需要进行并发处理或者异步操作的场景下。本篇将深入探讨如何在C#中...
Java多线程编程是开发高并发应用的关键技术之一,它涉及到如何有效地利用系统资源,提高程序的执行效率。在这个场景中,我们关注的是一个特定的多线程问题:A线程需要等待B线程和C线程执行完毕后再开始执行,同时...
"等待窗体"是多线程应用中一个重要的概念,通常用于在后台任务执行时提供用户友好的界面反馈。本项目就是针对C# Winform应用设计的一个等待窗体,它能在后台任务运行时显示进度或状态,让用户知道程序正在工作,并未...
在C#(ASP.NET)开发中,多线程是一个重要的概念,它允许应用程序同时执行多个任务,从而提高程序的效率和响应性。本示例主要介绍了如何使用`System.Threading.Thread`类来创建和管理多线程,以进行并行计算。 首先,...
### 多线程计数实现多线程执行后再执行主线程 #### 一、知识点概述 本文将深入探讨如何利用`CountDownLatch`机制来确保多个子线程完成各自的任务后,再让主线程继续执行的方法。这种方法在项目开发中非常实用,...
- **Program.cs**:程序的入口点,可能启动多线程应用。 - **ThreadManagerDemo.csproj**:项目文件,定义了项目的结构和编译配置。 - **FormMain.resx**:资源文件,存储窗体的本地化资源。 - **bin, obj**:...
在编程领域,多线程应用程序设计是至关重要的一个主题,特别是在现代计算机系统中,多核处理器的普及使得并发执行成为提升程序性能的有效手段。本文将深入探讨多线程应用程序设计的基础概念、优缺点以及实现方法,...
合理的线程数量和良好的同步策略是实现高性能多线程应用的关键。 总结,Windows环境下的多线程编程涉及了从线程创建、同步到通信的多个方面,理解和掌握这些原理与技术对于开发高效、稳定的应用至关重要。在实践中...
标题中的“多任务多线程下载器源码”是指一个软件程序,它的功能是同时...开发者可以通过阅读和学习这个源码,理解如何在实际编程中应用多线程技术来优化性能,以及如何构建一个能够处理多个并发任务的下载管理系统。
在编程中,多线程经常被用来实现多任务,使得程序可以在执行一项任务的同时处理其他任务,提高用户体验。 在VC++6.0环境中实现多线程,我们需要使用Windows API中的`CreateThread`函数或者C++标准库中的`std::...