在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。
现在Java终于有可返回值的任务(也可以叫做线程)了。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。
下面是个很简单的例子:
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; //有返回值的多线程 需事先callable接口 public class CallableFutureTest { public static void main(String[] args) throws Exception { CallableFutureTest ct = new CallableFutureTest(); // 创建一个线程池 ExecutorService pl = Executors.newFixedThreadPool(2); // 创建两个有返回值的线程对象 Callable c1 = ct.new MyCallable("1"); Callable c2 = ct.new MyCallable("2"); Callable c3 = ct.new MyCallable("3"); Callable c4 = ct.new MyCallable("4"); Future f1 = pl.submit(c1); Future f2 = pl.submit(c2); Future f3 = pl.submit(c3); Future f4 = pl.submit(c4); // 从Future中获取任务的ID号 System.out.println("======" + f1.get()); System.out.println("======" + f2.get()); System.out.println("======" + f3.get()); System.out.println("======" + f4.get()); System.out.println("主线程结束…………………………………………"); } class MyCallable implements Callable { private String id; public MyCallable(String id) { this.id = id; } @Override public Object call() throws Exception { System.out.println(Thread.currentThread().getName() + " : " + id); Thread.sleep(1000); return "Thread返回值id :" + id; } } }
相关推荐
Java线程学习笔记涉及了Java多线程编程的多个关键知识点,本篇知识点整理将详细解释每个概念及其在Java中的实现方式。 基本知识部分包含了Java线程编程的基础内容,它们是并发编程的基石。 任务Runnable是一个接口...
占式线程调度是Java和大多数现代操作系统采用的线程调度策略。在这种模式下,操作系统决定何时以及哪个线程将获得CPU的执行时间。线程的执行不是由线程自身控制,而是由操作系统通过时间片轮转或者优先级调度等方式...
【中信java培训资料------第一部分】是一份针对Java编程语言的初期学习资料,涵盖了从基础知识到实际应用的多个方面。这份资料旨在帮助初学者建立起坚实的Java编程基础,并逐步熟悉其核心概念和技术。 在【听课笔记...
本学习笔记旨在重新巩固并深入理解Java的基础知识,帮助读者建立起扎实的编程基础。 ### 第一部分:Java的第一个应用 在Java的学习旅程中,编写第一个"Hello, World!"程序是必不可少的起点。以下是一个简单的示例...
本学习笔记将深入探讨Java的核心概念,帮助你建立坚实的基础。 1. **Java语法基础** - 变量与数据类型:Java支持基本数据类型(如int、float、char)以及引用数据类型(如类、接口、数组)。变量声明必须指定类型...
这份学习笔记将深入探讨Java编程语言的基础、核心概念以及J2SE中的关键特性。以下是一些重要的Java-J2SE知识点: 1. **Java语言基础**: - **变量与数据类型**:Java有基本数据类型(如int, double, boolean等)和...
【UNIX多线程学习笔记】 在UNIX操作系统中,多线程是一种重要的编程模型,它允许多个执行流在单个进程中并发运行。多线程带来了许多优势,包括提高应用程序响应速度,充分利用多CPU系统的资源,以及优化程序结构,...
本文将深入探讨Java中的三个核心概念:多线程、反射以及Java 8的新特性,这些都是Java开发者必须掌握的重要知识点。 **多线程** 多线程是Java的一大亮点,它允许程序同时执行多个任务,提高系统资源的利用率和程序...
### 个人笔记--JAVA基础 #### 一、初识Java **1.1. Java语言是什么** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它被设计为简单、面向对象、分布式、解释型、健壮、安全、与体系结构...
在多线程编程中,进程和线程是两个核心概念。进程是操作系统资源分配的基本单位,每个独立执行的程序都对应一个进程。而线程则是程序执行的最小单元,是进程内部的一条执行路径。多线程是指在一个应用程序中存在多个...
- **线程(Thread)**:Java提供了多线程支持,理解和使用Thread类以及synchronized关键字是并发编程的基础。 - **访问控制符**:public, private, protected以及默认修饰符控制类、方法和变量的可见性。 - **...
### Java学习笔记——Java基础知识整理 #### 一、Java技术入门 Java是一种广泛使用的编程语言,因其跨平台性、安全性和高效性而受到青睐。Java最初由Sun Microsystems开发,并于1995年首次发布。 ##### 1. Sun ...
Java是一种广泛使用的面向...总的来说,Java学习笔记应该涵盖从基础知识到高级特性的全面内容,适合初学者和有一定基础的开发者作为参考。通过不断实践和学习,可以逐步掌握Java编程的精髓,成为一名熟练的Java开发者。
### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...
9. **多线程**:Java内置了对多线程的支持,通过Thread类或Runnable接口可以创建和管理多个并发执行的任务。理解和掌握线程同步机制,如synchronized关键字和wait/notify机制,是提升程序并发性能的重要步骤。 10. ...
这份“达内的Java学习笔记”涵盖了从基础到高级的Java知识体系,旨在帮助初学者和有经验的开发者深入理解Java的核心概念和技术。 1. **Java基础** - **语法结构**:了解Java的基本语法,包括数据类型(如整型、...
以上只是Java学习笔记中可能涉及的部分知识点,实际上,完整的笔记还会包含更深入的Java特性,如注解、模块系统、JDBC数据库访问、Spring框架等内容,以及实际项目开发中的最佳实践。这份笔记是初级Java程序员系统...
2. **多线程**:涵盖线程的创建方式、同步机制(synchronized关键字、wait/notify、Lock接口)、线程池以及并发工具类。 3. **网络编程**:讲解Socket通信和ServerSocket服务端编程,以及HTTP协议的简单应用。 4. ...
达内的内网学习笔记针对Java SE进行了深入讲解,为初学者提供了全面的学习材料。以下是对这些PDF文件中可能涵盖的重要知识点的详细解析: 1. **Java基础语法**: - 变量与数据类型:包括基本数据类型(如int, ...