`
wang吖
  • 浏览: 238437 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java多线程-新特性-有返回值的线程-学习笔记2

 
阅读更多

在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和大多数现代操作系统采用的线程调度策略。在这种模式下,操作系统决定何时以及哪个线程将获得CPU的执行时间。线程的执行不是由线程自身控制,而是由操作系统通过时间片轮转或者优先级调度等方式...

    中信java培训资料------第一部分

    【中信java培训资料------第一部分】是一份针对Java编程语言的初期学习资料,涵盖了从基础知识到实际应用的多个方面。这份资料旨在帮助初学者建立起坚实的Java编程基础,并逐步熟悉其核心概念和技术。 在【听课笔记...

    java学习笔记-从新开始-从心开始

    本学习笔记旨在重新巩固并深入理解Java的基础知识,帮助读者建立起扎实的编程基础。 ### 第一部分:Java的第一个应用 在Java的学习旅程中,编写第一个"Hello, World!"程序是必不可少的起点。以下是一个简单的示例...

    java基础核心学习笔记

    本学习笔记将深入探讨Java的核心概念,帮助你建立坚实的基础。 1. **Java语法基础** - 变量与数据类型:Java支持基本数据类型(如int、float、char)以及引用数据类型(如类、接口、数组)。变量声明必须指定类型...

    Java-J2SE学习笔记

    这份学习笔记将深入探讨Java编程语言的基础、核心概念以及J2SE中的关键特性。以下是一些重要的Java-J2SE知识点: 1. **Java语言基础**: - **变量与数据类型**:Java有基本数据类型(如int, double, boolean等)和...

    UNIX多线程学习笔记

    【UNIX多线程学习笔记】 在UNIX操作系统中,多线程是一种重要的编程模型,它允许多个执行流在单个进程中并发运行。多线程带来了许多优势,包括提高应用程序响应速度,充分利用多CPU系统的资源,以及优化程序结构,...

    java基础笔记,多线程、反射、java8

    本文将深入探讨Java中的三个核心概念:多线程、反射以及Java 8的新特性,这些都是Java开发者必须掌握的重要知识点。 **多线程** 多线程是Java的一大亮点,它允许程序同时执行多个任务,提高系统资源的利用率和程序...

    个人笔记--JAVA基础

    ### 个人笔记--JAVA基础 #### 一、初识Java **1.1. Java语言是什么** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。它被设计为简单、面向对象、分布式、解释型、健壮、安全、与体系结构...

    多线程学习笔记.docx

    在多线程编程中,进程和线程是两个核心概念。进程是操作系统资源分配的基本单位,每个独立执行的程序都对应一个进程。而线程则是程序执行的最小单元,是进程内部的一条执行路径。多线程是指在一个应用程序中存在多个...

    20-Spring-Java学习笔记脱水版1

    - **线程(Thread)**:Java提供了多线程支持,理解和使用Thread类以及synchronized关键字是并发编程的基础。 - **访问控制符**:public, private, protected以及默认修饰符控制类、方法和变量的可见性。 - **...

    java笔记整理(超详细) java笔记整理(超详细)

    Java是一种广泛使用的高级编程语言,以其面向对象的特性、跨平台的兼容性和强大的功能而闻名。...以上知识点涵盖了Java的基本特性、核心概念以及一些高级特性,理解这些将有助于深入学习和使用Java进行软件开发。

    java学习笔记,java基础知识整理

    ### Java学习笔记——Java基础知识整理 #### 一、Java技术入门 Java是一种广泛使用的编程语言,因其跨平台性、安全性和高效性而受到青睐。Java最初由Sun Microsystems开发,并于1995年首次发布。 ##### 1. Sun ...

    Java学习笔记(必看经典)

    Java是一种广泛使用的面向...总的来说,Java学习笔记应该涵盖从基础知识到高级特性的全面内容,适合初学者和有一定基础的开发者作为参考。通过不断实践和学习,可以逐步掌握Java编程的精髓,成为一名熟练的Java开发者。

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

    java学习笔记

    9. **多线程**:Java内置了对多线程的支持,通过Thread类或Runnable接口可以创建和管理多个并发执行的任务。理解和掌握线程同步机制,如synchronized关键字和wait/notify机制,是提升程序并发性能的重要步骤。 10. ...

    达内的Java学习笔记

    这份“达内的Java学习笔记”涵盖了从基础到高级的Java知识体系,旨在帮助初学者和有经验的开发者深入理解Java的核心概念和技术。 1. **Java基础** - **语法结构**:了解Java的基本语法,包括数据类型(如整型、...

    Java学习超强笔记

    以上只是Java学习笔记中可能涉及的部分知识点,实际上,完整的笔记还会包含更深入的Java特性,如注解、模块系统、JDBC数据库访问、Spring框架等内容,以及实际项目开发中的最佳实践。这份笔记是初级Java程序员系统...

    java学习笔记文档

    2. **多线程**:涵盖线程的创建方式、同步机制(synchronized关键字、wait/notify、Lock接口)、线程池以及并发工具类。 3. **网络编程**:讲解Socket通信和ServerSocket服务端编程,以及HTTP协议的简单应用。 4. ...

Global site tag (gtag.js) - Google Analytics