Runnable是执行工作的独立任务,但是不能返回任何值,如果希望在任务完成时候有返回值,可以实现Callable接口。
package cn.thread; //: concurrency/CallableDemo.java import java.util.concurrent.*; import java.util.*; class TaskWithResult implements Callable<String> { private int id; public TaskWithResult(int id) { this.id = id; } //Callable接口中的方法 public String call() { return "result of TaskWithResult " + id; } } public class CallableDemo { public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); ArrayList<Future<String>> results =new ArrayList<Future<String>>(); for(int i = 0; i < 10; i++){ results.add(exec.submit(new TaskWithResult(i))); } for(Future<String> fs : results){ try { // get() blocks until completion: System.out.println(fs.get()); } catch(InterruptedException e) { System.out.println(e); return; } catch(ExecutionException e) { System.out.println(e); } finally { exec.shutdown(); } } } } /* Output: result of TaskWithResult 0 result of TaskWithResult 1 result of TaskWithResult 2 result of TaskWithResult 3 result of TaskWithResult 4 result of TaskWithResult 5 result of TaskWithResult 6 result of TaskWithResult 7 result of TaskWithResult 8 result of TaskWithResult 9 *///:~
get方法是Future类中:
Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。
Future类位于java.util.concurrent包下,它是一个接口:
1
2
3
4
5
6
7
8
|
public interface Future<V> {
boolean cancel( boolean mayInterruptIfRunning);
boolean isCancelled();
boolean isDone();
V get() throws InterruptedException, ExecutionException;
V get( long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
} |
相关推荐
线程池是一种多线程处理形式,它可以预创建线程,并复用线程来执行多个任务,这样可以减少线程创建和销毁的开销,提高程序性能。 实际应用中,多线程的使用需要综合考虑问题的解决效率、开发复杂度、资源利用等因素...
Java多线程是Java编程中不可或缺的一部分,它允许并发执行多个任务,从而提高应用程序的效率和响应速度。本文将深入探讨Java多线程的相关知识点,包括它的用途、创建线程的方式、start()与run()的区别、Runnable和...
以上知识点涵盖了多线程编程在Java中的基础理论和实际操作,包括线程的创建、运行、异常处理以及线程安全等问题,这些都是在进行Java多线程面试时常见的问题,对于理解和掌握Java多线程编程至关重要。
在C#编程中,多线程是一个非常关键的特性,尤其在处理大量并发任务或优化程序性能时。本文将深入探讨C#中的多线程操作,结合提供的标题和描述,我们将学习如何创建、管理和同步线程,以及如何通过注释提高代码可读性...
- 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个进程拥有独立的内存空间。例如,在Windows系统中,一个运行中的exe文件就是一个进程。 - **...
MFC支持多线程编程,这在现代软件开发中极为重要,尤其是当需要处理复杂任务或提高应用程序性能时。 #### 二、MFC中的线程分类 MFC中主要存在两种类型的线程:**工作者线程**和**用户界面线程**。这两类线程的主要...
在IT行业中,多线程编程是提升程序性能和并发能力的重要技术之一,特别是在POSIX(Portable Operating System Interface)这样的开放标准平台上。POSIX是为操作系统提供接口的一系列标准,它定义了多线程编程的规范...
当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有自己独立的一段内存空间。一个进程中可以启动多个线程,例如,在Windows...
Java多线程是Java编程中不可或缺的一个重要概念,它允许程序在同一时间执行多个任务,从而提高了计算机系统的资源利用率和程序的响应速度。本篇将详细阐述Java多线程的基础知识,包括线程的概念、创建线程的方式以及...
在Windows编程中,多线程技术是实现高效并发处理的关键。Microsoft Foundation Class (MFC)库为开发者提供了便捷的多线程编程支持,主要分为工作者线程和用户界面线程两种类型。 工作者线程(Worker Thread)与用户...
Java多线程编程是Java语言的核心特性之一,它允许程序同时执行多个线程,从而实现多任务的并行处理,提高程序执行效率和用户体验。在Java中,多线程的实现主要涉及到以下几个关键知识点: 1. **线程的基本概念**:...
多线程编程允许在单个进程中创建多个执行路径,从而可以并行执行多个任务。在Linux环境下,使用多线程编程的常见库是POSIX线程库(pthread)。与多进程相比,多线程共享相同的地址空间,因此在通信和同步方面更加...
现代操作系统是多任务操作系统,多线程是实现多任务的一种方式。进程指的是一个内存中运行的应用程序,每个进程都有其独立的一块内存空间。一个进程中可以启动多个线程。 - **进程**:一个运行中的应用程序实例,...
3.多任务编程 * 并行 和 并发 * 进程 线程 4. 多进程编程 时间片 PCB PID 父子进程 优先级 进程特征 进程状态: 就绪态 运行态 等待态 5. ps -aux ps -ajx pstree top nice 6. os.fork() 7. os.getpid() os....
Java并发编程是Java开发中的重要领域,涉及到多线程、并发容器、同步机制等多个知识点。在JavaConcurrent库中,提供了丰富的工具类和接口来支持高效的并发编程。 首先,了解多线程的作用至关重要。多线程的主要目的...
在多线程编程中,这意味着多个线程可以在同一时间内执行不同的任务。这有助于提高程序的整体性能和响应速度。 - **进程与线程**:一个进程可以被认为是一个包含多个线程的容器,这些线程共享相同的地址空间。进程...
但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。 创建线程的方式有: 1. 继承Thread类创建线程类 2. 通过Runnable接口创建...
本文将详细讲解 Java 面试题,包括线程与进程的区别、多线程中的上下文切换、死锁与活锁的区别、Java 中守护线程和本地线程的区别、为什么使用 Executor 框架、Java 中 Executor 和 Executors 的区别、Java 中用到的...
本文将对Java高并发中常见的面试题进行总结,涵盖了守护线程和用户线程、线程与进程的区别、多线程中的上下文切换、死锁与活锁的区别、Java中的线程调度算法、线程组、Executor框架等知识点。 守护线程和用户线程 ...