1,实现Callabale<V>接口而不是Runnable接口。
2, 在call方法中返回需要的信息。
3.使用ExecutorService.submit调用,返回值是Future<V>。
4.通过get获得结果,也可以使用isDone进行检测;否则get可能阻塞直到有结果准备就绪。
看个例子:
package com.wjy.multithread; import java.util.concurrent.Callable; public class MyCallable implements Callable<String>{ private int id; public MyCallable(int id){ this.id=id; } @Override public String call() throws Exception { // TODO Auto-generated method stub return "id: "+id; } }
测试代码:
ExecutorService exec=Executors.newCachedThreadPool(); Future<String> str=exec.submit(new MyCallable(66)); try { System.out.println("result: "+str.get()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ exec.shutdown(); }
运行结果:
result: id: 66
相关推荐
volatile是Java中的一个关键字,它用于声明变量,确保该变量在多个线程间可见,并且每次读取时都是从主内存中读取,写入时则直接写到主内存中,而不使用线程的工作内存。这保证了变量的写操作对其他线程总是可见的,...
线程池是一种多线程处理形式,它可以预创建线程,并复用线程来执行多个任务,这样可以减少线程创建和销毁的开销,提高程序性能。 实际应用中,多线程的使用需要综合考虑问题的解决效率、开发复杂度、资源利用等因素...
- **run()**:直接调用run()方法,代码将在线程调用该方法的上下文中执行,即同步执行,不产生新的线程。 4. **Runnable接口与Callable接口的区别** - **Runnable**:run()方法无返回值,仅执行任务。 - **...
当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有自己独立的一段内存空间。一个进程中可以启动多个线程,例如,在Windows...
- 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个进程拥有独立的内存空间。例如,在Windows系统中,一个运行中的exe文件就是一个进程。 - **...
在C#编程中,多线程是一个非常关键的特性,尤其在处理大量并发任务或优化程序性能时。本文将深入探讨C#中的多线程操作,结合提供的标题和描述,我们将学习如何创建、管理和同步线程,以及如何通过注释提高代码可读性...
在嵌入式系统开发中,线程间同步和通信是至关重要的部分,特别是在多任务环境中。STM32作为一款广泛应用的微控制器,结合RT-Thread实时操作系统,可以实现高效的线程管理和通信机制。本篇文章将重点讲解如何使用邮箱...
MFC支持多线程编程,这在现代软件开发中极为重要,尤其是当需要处理复杂任务或提高应用程序性能时。 #### 二、MFC中的线程分类 MFC中主要存在两种类型的线程:**工作者线程**和**用户界面线程**。这两类线程的主要...
现代操作系统是多任务操作系统,多线程是实现多任务的一种方式。进程指的是一个内存中运行的应用程序,每个进程都有其独立的一块内存空间。一个进程中可以启动多个线程。 - **进程**:一个运行中的应用程序实例,...
Java多线程是Java编程中不可或缺的一个重要概念,它允许程序在同一时间执行多个任务,从而提高了计算机系统的资源利用率和程序的响应速度。本篇将详细阐述Java多线程的基础知识,包括线程的概念、创建线程的方式以及...
它需要一个线程标识符作为返回值,以及一个回调函数(线程入口点)和传递给该函数的参数。 2. `pthread_join()`: 用于等待某个特定线程结束。这可以防止主线程过早结束,确保所有工作线程完成任务。 3. `pthread_...
相比之下,用户界面线程拥有自己的消息队列和消息循环,负责处理用户的输入以及系统产生的事件,确保用户界面的即时响应。 在Win32 API层面,无论是工作者线程还是用户界面线程,启动新线程的方式并无本质区别,都...
Java多线程编程是Java语言的核心特性之一,...这些知识点是Java多线程编程的精髓,涵盖了从创建线程到线程间协作、线程安全与死锁处理等多个方面。掌握这些知识点对于编写高效、稳定、可维护的Java多线程程序至关重要。
【使用HOOK拦截任务管理器中直接杀进程的消息】 在IT领域,尤其是系统级编程和安全技术中,有时我们需要保护自己的进程不被意外终止,比如在任务管理器中被直接杀死。这种情况下,可以使用HOOK技术来拦截系统API,...
下面我们将从多个角度对进程和线程之间的区别进行详细阐述。 #### 1. 内存资源分配 - **进程**:每个进程都有自己独立的内存空间,即进程间的内存是不共享的。这意味着不同进程之间想要通信必须通过系统调用或者...
在`fork()`调用之后,程序会产生一个子进程,父子进程的进程ID不同,`fork()`返回值不同,使得每个进程根据返回值判断自身身份并输出相应的信息。 8. **进程通信**:虽然在这个描述中没有直接提到,但在实际的多...
Executor 接口对象能执行我们的线程任务。ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我们能获得任务执行的状态并且可以获取任务的返回值。使用 ThreadPoolExecutor 可以创建自定义...
在操作系统中,管理进程和线程是实现并发执行和任务调度的关键技术之一。正确地理解进程与线程的生命周期、状态变化以及它们如何被操作系统调度,对于操作系统的设计、优化和故障排除至关重要。通过深入学习操作系统...
Executor工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求.Executor接口对象能执行我们的线程任务。ExecutorService接口继承了Executor接口并进行了扩展,提供了更多的方法我们能获得任务执行的...
2. Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。 3. Call方法可以抛出异常,run方法不可以。 4. 运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的...