今天复习Thinking in Java的带返回值的线程。
public class ThreadWithReturn {
//Runnable接口是执行工作的独立任务,但是它不反悔任何值。
//如果你希望你的任务在完成时能够返回一个值,那么可以实现Callable接口
//实现Callable接口
class TaskWithResult implements Callable<String>{
private int id;
public TaskWithResult(int id){
this.id = id;
}
@Override
public String call() throws Exception {
return "result of TaskWithResult" + id;
}
}
public static void main(String[] args) {
ThreadWithReturn twr = new ThreadWithReturn();
//并且必须使用ExecutorService.submit()方法调用
ExecutorService exec = Executors.newCachedThreadPool();
List<Future<String>> results = new ArrayList<Future<String>>();
for(int i=0;i<10;i++){
results.add(exec.submit(twr.new TaskWithResult(i)));
}
for(Future<String> fs :results){
try{
//阻塞直到完成
System.out.println(fs.get());
} catch (InterruptedException e) {
e.printStackTrace();
return;
}catch(ExecutionException e){
e.printStackTrace();
return;
}
finally{
exec.shutdown();
}
}
//submit方法会产生Future对象,它用Callable返回特定类型进行了参数优化。
//可以使用isDone()方法来查询Future是否已经完成。
//当任务完成时,你可以调用get()方法获取结果值。
//如果不判定isDone()就直接调用get()方法,get()将会发生阻塞。
}
}
分享到:
相关推荐
在C#编程中,多线程、委托和回调是三个重要的概念,它们在构建高性能、响应迅速的应用程序中起着至关重要的作用。本资源包"多线程-委托-回调实例.zip"似乎提供了一些示例代码,帮助学习者深入理解这些主题。 1. **...
在C++多线程编程中,获取线程返回值是一个很重要的 topic。在C++11标准中,std::thread对象会忽略顶层函数的返回值,这就使得获取线程返回值变得困难。下面我们将详细介绍两种获取返回值的方法:传统方法和C++11方法...
通过以上两个新增的线程创建方式,我们可以看到Java 5.0版本在多线程编程方面的改进和增强。使用`Callable`接口和线程池不仅提高了线程管理的灵活性,还增强了程序的可扩展性和性能表现。在实际开发过程中,根据具体...
在给定的描述中,作者面临的问题是如何在一个环境搭建工具中,通过多线程并行执行操作,并收集每个操作的返回值来判断所有操作是否成功。为了解决这个问题,作者创建了一个名为`MyThread`的类,这个类封装了多线程...
5. **线程返回值**: - 线程函数可以通过`ExitThread()`函数设置线程的退出代码,这个值可以通过`GetExitCodeThread()`函数获取。 - 在VC++中,主线程可以通过`Joinable`线程类的`join()`成员函数等待子线程结束并...
此外,Java还提供了Callable和Future接口,它们支持带返回值的多线程。 接着,我们讨论时间片调度。在多线程环境下,操作系统通常会采用时间片轮转的方式进行调度,即将CPU的执行时间分割成多个时间片,每个线程在...
大家都知道实现多线程的2种方式,今天来讲讲Future实现具有返回值的线程。应用场景:前端调用时无需等待线程结束返回,线程结束后需进行其它操作如更新状态、通知kafuka等。
同时,`jdbctest`可能涉及到了如何在多线程环境下使用JDBC,比如在一个线程中执行查询,然后在另一个线程中处理结果,这与我们的主题“有返回值的线程”相吻合。 总之,要实现有返回值的线程,我们可以使用Java的`...
互斥量则用于保护数据,防止多线程并发访问时出现冲突。 四、线程返回数据的方法 1. **使用全局变量**:线程执行完毕后,可以修改全局变量,然后由主线程或其他线程读取。这种方式简单,但不适用于复杂的同步需求。...
Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java线程:新特征-信号量 Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征...
Linux多线程编程是现代操作系统编程的重要组成部分,尤其是在Linux环境下,多线程编程更是成为了高性能应用不可或缺的技术之一。本文档主要涉及Linux多线程编程的一些关键知识点,包括pthread线程库的使用、线程的...
*********************************************************...两个线程,利用委托更新主线程listBox1控件的内容,并将线程的名字传递过去 ***********************************************************************
### Linux下的C语言多线程知识点详解 #### 一、多线程概念及重要性 在探讨具体的编程细节之前,我们首先需要理解为什么在Linux环境下使用C语言进行多线程编程是如此的重要。 1. **多线程的概念:** - 多线程是指...
这个`parse_detail_page`函数可以处理多个URL,每个URL都在一个独立的线程中处理,最后返回一个包含所有线程返回值的列表。 需要注意的是,使用`join()`方法是必要的,因为它确保主线程等待所有子线程结束,防止在...
在Windows平台上进行应用程序开发时,Microsoft Foundation Class (MFC) 库提供了一种方便的方式来实现多线程编程。MFC是Microsoft为C++开发者设计的一个类库,它封装了Windows API,使得创建复杂的Windows应用程序...
"C#多线程函数如何传参数和返回值" 在C#中,多线程函数的参数传递和返回值处理是非常重要的。多线程函数可以使用委托(delegates)来实现参数的传递和返回值的处理。 委托是具有同样参数和返回值的函数的集合。...
通过几个实验练习,学习线程之间连接的具体实现。下面列举了两个例子,一个是子线程返回简单数据类型;另一个是子线程返回复杂数据类型。 实现代码 子线程返回复杂数据类型 #include #include #include #include ...