`

并发编程回顾:Runnable与Callable

 
阅读更多

原先多线程并发编程的学习笔记和代码整理一下贴上来。

---------------------------------

Runnable与Callable

Runnable工作是执行独立的任务,它不具备任何返回值。如果需要任务需要完成后返回一个值,使用Callable接口。

一、Runnable:

无返回值(void),如下

class Worker implements Runnable{
	private static int workerCount = 0; //线程总数
	private final int workId = workerCount++; //final初始化后值不会变
	private int workTime = 3; //每个线程执行3次
	public void run() {
		while(workTime-- > 0){
			System.out.println("workId:#"+workId+" workTime:"+workTime+" working...");
		}
	}
	
}

此处定义了一个Worker任务,每个任务内部打印Id和执行次数。

启动任务执行:new Thread(new Worker()).start()

二、Callable:

通过泛型的方式,指定返回值的类型,下面是一个返回String的例子。

class TaskWithResult implements Callable<String>{
	private int i=3;//每个线程执行3次
	public String call() throws Exception {
		while(true){
			if(--i==0) return "thread name:"+Thread.currentThread().getName();
		}
	}
}

定义一个任务,该任务执行3次,最后返回该线程名字。注意Callable指定了类型为<String>,因此call方法的返回值为String类型。

使用方法:

ExecutorService exec = Executors.newCachedThreadPool();
List<Future<String>> list = new ArrayList<Future<String>>();
for(int i=5;i>0;i--){
    list.add(exec.submit(new TaskWithResult()));
}
for(Future<String> fs:list){
    try {
	if(fs.isDone()){//如果task已经完成
	    System.out.println("callable return:"+fs.get());
	}else{
	    System.out.println("cancel:"+fs.cancel(true));
	    System.out.println("isCancelled:"+fs.isCancelled());
	}
    } catch (InterruptedException e) {
	e.printStackTrace();
    } catch (ExecutionException e) {
	e.printStackTrace();
    }finally{
	exec.shutdown();//关闭线程池.
    }
}

此处创建了一个线程池,启动5个任务,每次使用submit提交任务后会返回一个Future对象。

Future表示异步计算的结果,提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。

后面对Future列表进行遍历,检查每个task是否完成。如果还没有完成,直接取消任务。

注意,如果不使用isDone判断task是否执行完,使用Future的get方法会一直阻塞,直到任务完成。

 

分享到:
评论

相关推荐

    Java中的Runnable,Callable,Future,FutureTask的比较

    Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...

    【并发编程】 — Runnable、Callable、Future和FutureTask之间的关系

    2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...

    Java并发编程:设计原则与模式(第二版).rar

    《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java平台上的多线程和并发编程的著作。本书旨在帮助开发者理解和掌握在Java环境中进行高效并发处理的关键技术与设计模式。以下是对该书内容的一些核心知识...

    Java并发编程:设计原则与模式(第二版)-3

    《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java多线程编程技术的权威著作。这本书详细阐述了在Java平台中进行高效并发处理的关键概念、设计原则和实用模式。以下是对该书内容的一些核心知识点的概述...

    java并发编程:设计原则与模式.rar

    《Java并发编程:设计原则与模式》是一本深入探讨Java多线程编程的书籍,它涵盖了并发编程中的关键概念、原则和模式。在Java中,并发处理是优化应用程序性能、提高资源利用率的重要手段,尤其在现代多核处理器的环境...

    使用Runnable模拟Callable接口实现线程有返回值

    大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...

    MapReduce,泛型,匿名内部类,Runnable和Callable

    了解这些技术对于处理大型数据处理、并发编程和优化代码质量至关重要。MapReduce可以帮助开发者在分布式环境中有效地处理海量数据,而泛型、匿名内部类以及Runnable和Callable接口则为Java编程提供了强大的工具,使...

    java高并发编程第一版

    1. **并发基础**:首先,书中会介绍并发编程的基本概念,包括进程与线程的区别,以及Java中的Thread类和Runnable接口。了解线程的生命周期、同步和协作机制是学习并发的基础。 2. **Java内存模型**:Java内存模型...

    深入理解高并发编程-核心技术原理

    【深入理解高并发编程-核心技术原理】是一本专注于讲解高并发编程核心概念和技术的书籍,由阿里P8级别的架构师及Mykit系列开源框架作者撰写。本书内容涵盖源码分析、基础案例、实战案例和面试相关知识,旨在帮助读者...

    一本经典的多线程书籍 Java并发编程 设计原则与模式 第二版 (英文原版)

    《Java并发编程 设计原则与模式 第二版》是一本深受程序员喜爱的经典书籍,由Addison Wesley出版。这本书深入探讨了Java平台上的多线程编程技术,为开发者提供了丰富的设计原则和模式,帮助他们理解和解决并发环境中...

    Java并发编程:设计原则与模式(第二版)-3PDF

    《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java平台上的多线程和并发编程的权威著作。这本书旨在帮助开发者理解和掌握如何有效地编写可扩展且高效的并发程序。以下是书中涵盖的一些关键知识点: 1....

    Java并发编程的设计原则与模式

    本文将深入探讨Java并发编程的设计原则与模式,旨在帮助开发者理解并有效地应用这些原则和模式。 一、并发编程的基础概念 并发是指两个或多个操作在同一时间间隔内执行,而不是严格意义上的同一时刻。在Java中,...

    JAVA并发编程艺术pdf版

    《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...

    Java 并发编程实战.pdf

    根据提供的信息,“Java 并发编程实战.pdf”这本书聚焦于Java并发编程的实践与应用,旨在帮助读者深入了解并掌握Java中的多线程技术及其在实际项目中的应用技巧。虽然部分内容未能提供具体章节或实例,但从标题及...

    Runnable、Callable、Future、FutureTask有什么关联.docx

    Runnable、Callable、Future、FutureTask有什么关联.docx

    java并发编程与实践

    "Java并发编程与实践"文档深入剖析了这一主题,旨在帮助开发者理解和掌握如何在Java环境中有效地实现并发。 并发是指在单个执行单元(如CPU)中同时执行两个或更多任务的能力。在Java中,这主要通过线程来实现,...

    《java 并发编程实战高清PDF版》

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南。这本书旨在帮助开发者理解和掌握在Java环境中创建高效、可扩展且可靠的多线程应用程序的关键技术和实践。它涵盖了从基本概念到高级主题的广泛内容,...

    Java 并发编程:设计原则与模式

    本资料“Java并发编程:设计原则与模式”深入探讨了这些关键主题。 首先,我们需要理解Java并发编程的基础概念。Java中的并发是通过线程实现的,线程是程序执行的最小单位。Java提供了多种创建和管理线程的方法,如...

    Java并发编程-3.pdf

    Java并发编程中的多线程协作机制 在 Java 并发编程中,多线程协作机制是非常重要的一部分。多线程协作机制是指在多线程编程中,多个线程之间如何协作、同步和通信,以达到共同完成某个任务的目的。Java 提供了多种...

Global site tag (gtag.js) - Google Analytics