Android线程池(二)——ThreadPoolExecutor及其拒绝策略RejectedExecutionHandler使用示例

简介: MainActivity如下:package cc.vv;import java.util.concurrent.LinkedBlockingQueue;import java.
MainActivity如下:
package cc.vv;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import android.os.Bundle;
import android.app.Activity;

/**
 * Demo描述:
 * 线程池(ThreadPoolExecutor)及其拒绝策略(RejectedExecutionHandler)使用示例
 * 
 * 工作原理:
 * 线程池的工作中主要涉及到:corePoolSize,workQueue,maximumPoolSize,RejectedExecutionHandler
 * 它们的调用原理:
 * 1 当线程池中线程数量小于corePoolSize则创建线程,并处理请求
 * 2 当线程池中线程数量等于corePoolSize则把请求放入workQueue中,线程池中的的空闲线程就从workQueue中取任务并处理
 * 3 当workQueue已满存放不下新入的任务时则新建线程入池,并处理请求;
 *   如果线程池中线程数大于maximumPoolSize则用RejectedExecutionHandler使用一定的策略来做拒绝处理
 * 
 * 在该机制中还有一个keepAliveTime,文档描述如下:
 * when the number of threads is greater than the core, 
 * this is the maximum time that excess idle threads will wait for new tasks before terminating.
 * 它是什么意思呢?
 * 比如线程池中一共有5个线程,其中3个为核心线程(core)其余两个为非核心线程.
 * 当超过一定时间(keepAliveTime)非核心线程仍然闲置(即没有执行任务或者说没有任务可执行)那么该非核心线程就会被终止.
 * 即线程池中的非核心且空闲线程所能持续的最长时间,超过该时间后该线程被终止.
 * 
 * 
 * RejectedExecutionHandler的四种拒绝策略
 * 
 * hreadPoolExecutor.AbortPolicy:
 * 当线程池中的数量等于最大线程数时抛出java.util.concurrent.RejectedExecutionException异常.
 * 涉及到该异常的任务也不会被执行.
 * 
 * ThreadPoolExecutor.CallerRunsPolicy():
 * 当线程池中的数量等于最大线程数时,重试添加当前的任务;它会自动重复调用execute()方法
 * 
 * ThreadPoolExecutor.DiscardOldestPolicy():
 * 当线程池中的数量等于最大线程数时,抛弃线程池中工作队列头部的任务(即等待时间最久Oldest的任务),并执行新传入的任务
 * 
 * ThreadPoolExecutor.DiscardPolicy():
 * 当线程池中的数量等于最大线程数时,丢弃不能执行的新加任务
 * 
 * 参考资料:
 * http://blog.csdn.net/cutesource/article/details/6061229
 * http://blog.csdn.net/longeremmy/article/details/8231184
 * http://blog.163.com/among_1985/blog/static/275005232012618849266/
 * http://blog.csdn.net/longeremmy/article/details/8231184
 * http://ifeve.com/java-threadpool/
 * http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
 * http://blog.csdn.net/ns_code/article/details/17465497
 * Thank you very much
 * 
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		testRejectedExecutionHandler();
	}

	// 在此分别测试四种策略,替换ThreadPoolExecutor()方法最后一个参数即可.
	private void testRejectedExecutionHandler() {
		int produceTaskMaxNumber = 10;
		// 构造一个线程池
		ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 4, 3,
				TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(3),
				new ThreadPoolExecutor.DiscardPolicy());

		for (int i = 1; i <= produceTaskMaxNumber; i++) {
			try {
				String task = "任务" + i;
				System.out.println("将" + task + "放入线程池");
				threadPoolExecutor.execute(new RunnableImpl(task));
			} catch (Exception e) {
				e.printStackTrace();
				System.out.println("AbortPolicy策略抛出异常----> " + e.toString());
			}
		}
	}

	private class RunnableImpl implements Runnable {
		private String taskName;
		private int consumerTaskSleepTime = 2000;

		RunnableImpl(String taskName) {
			this.taskName = taskName;
		}

		public void run() {
			System.out.println("开始 " + taskName);
			try {
				// 模拟耗时任务
				Thread.sleep(consumerTaskSleepTime);
			} catch (Exception e) {
				e.printStackTrace();
			}
			System.out.println("完成 " + taskName);
		}

	}

}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>


相关文章
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
安全 数据安全/隐私保护 Android开发
探索Android与iOS的隐私保护策略
在数字时代,智能手机已成为我们生活中不可或缺的一部分,而随之而来的则是对个人隐私和数据安全的日益关注。本文将深入探讨Android与iOS两大操作系统在隐私保护方面的策略和实践,分析它们如何应对日益严峻的隐私挑战,以及用户应如何保护自己的数据安全。通过对比分析,我们将揭示两大系统在隐私保护方面的优势和不足,为用户提供有价值的见解和建议。
|
9月前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
432 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
|
12月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
352 3
|
12月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
API Android开发 iOS开发
深入探索Android与iOS的多线程编程差异
在移动应用开发领域,多线程编程是提高应用性能和响应性的关键。本文将对比分析Android和iOS两大平台在多线程处理上的不同实现机制,探讨它们各自的优势与局限性,并通过实例展示如何在这两个平台上进行有效的多线程编程。通过深入了解这些差异,开发者可以更好地选择适合自己项目需求的技术和策略,从而优化应用的性能和用户体验。
|
前端开发 Android开发 开发者
探索Android与iOS的跨平台开发策略
在当今多元化的移动设备市场中,开发者面临着为不同操作系统设计应用的挑战。本文深入探讨了Android和iOS两大主流平台的跨平台开发策略。我们将分析使用Flutter、React Native等框架进行跨平台开发的优劣,并讨论如何克服各平台间的差异性,以实现高效、一致的用户体验。此外,文章还将提供一些实用的技巧和最佳实践,帮助开发者优化跨平台应用的性能和兼容性。
258 4
|
前端开发 Android开发 iOS开发
探索Android与iOS的跨平台开发策略
在移动应用开发的多元化时代,跨平台开发已成为开发者追求效率和广泛覆盖的重要手段。本文深入探讨了Android与iOS两大主流平台下的跨平台开发策略,分析了各自的优势与挑战,并通过实际案例展示了如何有效实施跨平台解决方案,以期为开发者提供有价值的参考和启示。
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
393 31
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
259 1

热门文章

最新文章