`

Java(Android)线程池

阅读更多

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。

1、new Thread的弊端
执行一个异步任务你还只是如下new Thread吗?

那你就out太多了,new Thread的弊端如下:

a. 每次new Thread新建对象性能差。
b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。
c. 缺乏更多功能,如定时执行、定期执行、线程中断。
相比new Thread,Java提供的四种线程池的好处在于:
a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。
b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
c. 提供定时执行、定期执行、单线程、并发数控制等功能。

 

2、Java 线程池
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

(1). newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。示例代码如下:

线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。

 

(2). newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。示例代码如下:

因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。

定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()。可参考PreloadDataCache

 

(3) newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。延迟执行示例代码如下:

表示延迟3秒执行。

 

定期执行示例代码如下:

表示延迟1秒后每3秒执行一次。

ScheduledExecutorService比Timer更安全,功能更强大,后面会有一篇单独进行对比。

 

(4)、newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。示例代码如下:

结果依次输出,相当于顺序执行各个任务。

现行大多数GUI程序都是单线程的。Android中单线程可用于数据库操作,文件操作,应用批量安装,应用批量删除等不适合并发但可能IO阻塞性及影响UI线程响应的操作。

分享到:
评论

相关推荐

    Java/Android线程池演示Demo

    总结,这个"Java/Android线程池演示Demo"旨在通过实例展示如何在Android和Java项目中使用线程池进行并发处理,帮助开发者理解线程池的工作原理和优势,以及如何根据应用需求配置和管理线程池。通过分析和实践这个...

    android线程池demo

    本文将深入探讨`android线程池`的概念、工作原理以及如何在实际项目中实现一个简单的应用。 ### 线程池简介 线程池是由多个线程组成的集合,它预先创建了一定数量的线程,当有任务需要执行时,线程池会从已存在的...

    Android线程池管理的代码例子

    本示例将详细介绍如何在Android中使用两种主要的线程池:ThreadPoolExecutor和ScheduledExecutorService。 ThreadPoolExecutor是Java并发库中提供的一个基础线程池实现,它允许开发者自定义核心线程数、最大线程数...

    Android中的线程池与任务队列

    在Android中,我们通常使用`java.util.concurrent`包下的`ExecutorService`接口和其相关的类来创建线程池。 线程池的核心概念包括: 1. 工作线程(Worker Threads):线程池中的线程,负责执行任务。 2. 任务队列...

    android 线程池下载

    总之,Android线程池下载是一种优化网络请求的方法,通过合理配置线程池和使用HTTP协议,可以实现高效、稳定的文件下载。这涉及到多线程编程、网络通信、文件IO等多个方面,对提升Android应用的性能和用户体验具有...

    android线程池案例

    "android线程池案例"提供了这样的示例,用于演示如何在Android应用程序中有效地使用线程池,并结合进度条来显示任务的执行状态。 线程池的核心概念包括: 1. **ExecutorService**: Java的`ExecutorService`接口是...

    android 线程池 handler异步刷新 双缓存

    在Android中,我们通常使用`java.util.concurrent`包下的`ExecutorService`和`ThreadPoolExecutor`来创建线程池。线程池可以避免频繁创建和销毁线程带来的性能开销,提高系统资源的利用率。通过合理配置线程池的参数...

    android缓存线程池的一个框架

    在Android中,我们经常使用`java.util.concurrent`包下的`ExecutorService`、`ThreadPoolExecutor`等类来创建和管理线程池。线程池允许我们预先配置一组工作线程,以便在需要时能够快速响应任务提交,避免频繁创建和...

    Android开发中线程池的使用Demo

    在Android应用开发中,线程池的使用是提高性能和优化资源管理的重要手段。线程池允许我们预先创建一定数量的线程,处理并发任务,而不是每次需要时都创建新线程,这样可以减少系统资源的消耗,提高响应速度。本示例...

    Android线程池ExcutorService

    在Android开发中,`ExecutorService`是Java并发编程的一个重要组件,它被广泛应用于线程管理,特别是处理大量异步任务时。`ExecutorService`是`java.util.concurrent`包下的接口,它提供了一种优雅的方式来管理和...

    android中线程池dmeo

    线程池的概念源于Java的ExecutorService,Android中主要通过`java.util.concurrent`包下的`ThreadPoolExecutor`类来实现。线程池的基本工作原理包括:接收任务、调度任务、执行任务以及管理线程。 1. **线程池的...

    Android java 线程池

    在Android开发中,Java线程池是一个至关重要的概念,它能有效地管理多个并发任务,提高应用性能并降低资源消耗。线程池通过复用已创建的线程来避免频繁创建和销毁线程带来的开销,从而提升系统效率。在本教程中,...

    android线程池

    在Android开发中,线程池是一种管理线程的机制,它可以帮助我们更高效地调度并发任务,优化系统资源的使用,防止过多线程导致的系统性能下降或崩溃。本篇文章将深入探讨四种主要的线程池类型及其实现,旨在帮助...

    Android线程池+单例模式+webService

    本项目涉及了三个核心概念:线程池、单例模式和WebService,这些都是Android应用开发中的重要知识点。 首先,让我们来深入理解线程池。线程池是一种多线程处理形式,预先创建了多个线程,当需要执行任务时,直接从...

    Java / Android 基于Http的多线程下载的实现

    2. **创建线程池**:使用`java.util.concurrent.ExecutorService`创建一个线程池,以便管理下载线程。 3. **线程任务**:为每个线程创建一个下载任务,任务包含起始位置、结束位置和目标文件的输出流。在线程中,...

    Android 线程池、信号量、Looper、缓存初探

    Android系统中的`java.util.concurrent.ThreadPoolExecutor`是实现线程池的主要类。通过设置核心线程数、最大线程数和任务队列,我们可以根据需求调整线程池的行为。使用线程池可以避免频繁创建和销毁线程的开销,...

    android线程池项目

    通过这个"android线程池项目",你可以亲自实践如何在Android中创建线程池,提交任务,以及观察其运行效果。通过代码分析和调试,你将深入理解线程池的工作机制,提升你的Android开发技能。记得在实践中不断思考和...

    Java常用线程池原理及使用方法解析

    Java线程池是一种高效管理线程的工具,它允许开发者预先创建一组线程,当需要执行新任务时,线程池会从池中选择一个空闲线程来执行任务,而不是每次都创建新的线程。线程池的使用有助于减少线程创建和销毁的开销,...

    android(java)四大线程池详解

    Java 和 Android 开发中,线程池是一种高效管理并发任务的机制,它可以克服直接使用 `new Thread` 的诸多缺点。本文将详细介绍四种由 `Executors` 工具类提供的线程池类型及其特点。 1. **new Thread 的弊端** - ...

    Android下用线程池实现Http下载程序

    2. **ExecutorService**:在Android中,我们可以使用`java.util.concurrent.ExecutorService`接口来创建和管理线程池。`ExecutorService`提供了调度和执行任务的能力,包括控制并发级别、处理线程异常等。 3. **...

Global site tag (gtag.js) - Google Analytics