java中继承自Thread或者实现Runnable接口的类都是可用于执行多线程任务的类
要想得到任务执行的结果,可以向类的构造方法中传入类类型参数,例如
class AddThread implements Runnable{
private int a;//操作数a
private int b;//操作数b
public Object result;//结果
/**
* 构造方法
* @param a
* @param b
*/
public AddThread(int a,int b) {
super();
this.a = a;
this.b = b;
}
@Override
public void run() {
result=a+b;
}
}
用这种方式可以获得线程执行的结果,但是不知道线程何时执行完,也就是不知道何时去取执行结果
用下面这种方式,可以解决这个问题
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 加法线程类,做两个数的相加操作,返回结果
* @author admin
*
*/
class AddThread implements Callable<Object>{
private int id;//id字段,相当于线程名称
private int a;//操作数a
private int b;//操作数b
/**
* 构造方法
* @param a
* @param b
*/
public AddThread(int id,int a,int b) {
super();
this.id=id;
this.a = a;
this.b = b;
}
@Override
public Object call() throws Exception {
return a+b;
}
}
public class Test {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService exec = Executors.newCachedThreadPool();
//Future相当于是用来存放Executor执行的结果的一种容器
List<Future<Object>> results = new ArrayList<Future<Object>>();
for (int i=0;i<5;i++) {
results.add(exec.submit(new AddThread(i,i,i)));
}
for (Future<Object> fs:results) {
//fs.get()会等待线程返回出结果再执行
Object count=fs.get();
System.out.println(count);
}
exec.shutdown();
}
}
分享到:
相关推荐
例如,每个线程可以使用`AtomicInteger`累加计算结果,当所有线程执行完后,主线程可以通过读取`AtomicInteger`的值来获取汇总的结果。或者,使用`ConcurrentHashMap`存储每个线程的局部结果,最后主线程遍历`...
在易语言中,线程可以用来执行一些耗时但不阻塞主线程的操作,如网络通信、大数据计算等。创建线程可以使程序运行更加流畅,提高用户体验。 二、线程的创建与启动 在易语言中,创建线程通常需要定义一个子程序作为...
标题提到的“多线程执行完后主程序再执行(包括需要子线程返回结果)”是一个典型的多线程同步问题。在这个场景中,主程序会启动多个子线程去执行不同的任务,然后等待所有子线程执行完毕,最后处理子线程返回的结果...
在易语言中,我们可以使用“创建线程”命令来创建新的执行线程,然后在线程中执行特定的任务。但线程间的通信,尤其是线程返回数据,是个需要注意的问题。 在多线程环境下,线程间的通信通常通过共享内存、信号量、...
2. `Runnable`或`Callable`: 这些是任务的实现,`Runnable`不返回结果,而`Callable`可以返回一个`Future`对象,包含任务的执行结果。 3. `submit()`方法:用于向`ExecutorService`提交任务,如果任务是`Callable`...
当我们需要异步执行一个任务,并等待其结果时,可以使用ExecutorService和Future。首先,将任务封装成Callable对象,然后提交给ExecutorService。Future对象可以用来检查任务是否完成,如果超过预定时间,可以调用`...
此外,MySQL还提供了`mysqladmin`命令行工具,它可以用来执行一些管理任务,包括查看和终止线程。`mysqladmin processlist`命令类似于`SHOW PROCESSLIST`,它会列出所有线程的信息。而`mysqladmin kill`命令则用于...
总结一下,`Runnable`用于无返回值的简单任务,`Callable`用于有返回值的任务,`Future`作为结果的容器,而`FutureTask`则将两者结合,使得`Callable`的任务可以通过`ExecutorService`执行。在实际开发中,根据需求...
在提供的代码片段中,我们看到了一个具体的例子,即通过`CountDownLatch`来确保所有子线程(这里是8个)完成任务后,主线程才返回结果。这在数据聚合或批处理场景中尤为常见,比如收集各个模块的数据,然后汇总处理...
本主题聚焦于如何在C#中执行CMD(命令提示符)命令并获取返回结果,这对于系统集成、自动化任务或者与操作系统底层交互的场景非常有用。 首先,我们需要了解CMD(Command Prompt)是Windows操作系统中的一个基础...
- 在易语言中,可以使用“创建线程”命令来创建一个新的线程,该命令会返回一个线程ID,这个ID用于后续的线程管理和操作。 - 当线程执行完毕或被强制中断时,系统会自动清理线程资源。但若需手动结束线程,可使用...
"主线程等待子多线程(无结果返回)执行完成再继续执行"这个主题就涉及到如何在Java、C#、Python等编程语言中实现这种同步机制。下面将详细讨论这个知识点。 **1. Java中的`Thread.join()`方法** 在Java中,主线程...
在CUDA中,线程组织成线程块和线程网格,线程块内的线程可以同时执行任务,形成并行计算。 首先,我们需要理解CUDA中的线程层次结构。线程网格由多个线程块组成,而每个线程块又包含若干个线程。这种结构允许GPU在...
在易语言中,子程序可以接受参数并返回结果,这样就能灵活地传递信息给线程或从线程获取结果。 5. **销毁线程**: 当线程完成其任务或者不再需要时,通常会销毁线程以释放系统资源。在易语言中,使用“销毁线程”...
在Java中,我们可以通过`ExecutorService`和`Future`来管理多线程任务,并获取它们的执行结果。`ExecutorService`是`java.util.concurrent`包中的一个接口,用于管理和控制线程的生命周期,如启动线程、关闭线程池等...
为了解决这个问题,作者创建了一个名为`MyThread`的类,这个类封装了多线程执行和结果收集的功能。 `MyThread`类的构造函数接受一个可选参数`func_list`,这是一个列表,每个元素是一个包含`func`(函数引用)和`...
对于多线程处理,每个线程可以拥有自己的`Statement`或`ResultSet`对象。为了避免线程之间的数据竞争,我们需要确保每个线程只操作它自己的数据,或者使用数据库提供的事务支持来确保数据的一致性。 以下是一个基本...
这使得我们可以用它来确保一组线程在开始执行之前等待其他线程完成某些操作,或者在所有线程都完成执行后统一进行下一步。 在提供的代码示例中,`time()`方法用于测量指定并发度下执行给定任务的总时间。它使用了三...