在Android如何在保证满足面向对象的单一原则(SRP)和开闭原则(OCP)的条件下,完成线程池的使用

原创 2015年11月19日 11:18:26

下面先总结一下线程池相关的知识点:
关于线程池相关类的继承关系为:
ThreadPoolExecutor—extends—》AbstractExecutorService—implements—》ExecutorService(接口)—extends—》Executor(接口)
1.关于ThreadPoolExecutor对象的创建时相关的参数的含义:
下面详细说明:
这里写图片描述
共有四个构造函数,其中共同的参数为:
(1)corePoolSize:当前维护的线程数量,甚至包括闲置的线程
(2)maximumPoolSize:允许在线程池中维护的最大线程数量
(3)keepAliveTime:对于线程池中所维护的线程所允许的闲置时间
(4)unit:闲置时间的时间单位
(5)workQueue:线程池中所使用的线程任务缓冲队列
除了以上参数外其他几个不常用的构造函数中特有的参数的含义为:
这里写图片描述
(6)handler:当缓冲队列已满,并且达到了最大线程数量的时候,通过此参数来处理被拒绝的任务
这里写图片描述
(7)threadFactory:用来创建新的线程

下面单独解释一下参数handler具体的值的含义,共有四个:

  1. ThreadPoolExecutor.AbortPolicy()
    抛出java.util.concurrent.RejectedExecutionException异常
  2. ThreadPoolExecutor.CallerRunsPolicy()
    重试添加当前的任务,他会自动重复调用execute()方法
    3.ThreadPoolExecutor.DiscardOldestPolicy()
    抛弃旧的任务
    4.ThreadPoolExecutor.DiscardPolicy()
    抛弃当前的任务

2.下面说当由线程池去执行任务的时候各个参数之间的关系,也就是线程池的执行原理:
先说一下以下几个参数的优先级,也就是下面几个参数的使用顺序:
从低到高依次为:corePoolSize——》workQueue——》maximumPoolSize——》handler
(1)当一个任务(Runnable)被执行时,通过调用execute(Runnable runnable)方法,此时当线程池中的线程数量小于corePoolSize时,即使有闲置线程首先会在线程池中创建一个新的线程去执行此任务。
(2)随着任务数量的增加,当线程池中线程的数量等于corePoolSize,并且workQueue缓冲队列未满时,会将新增加的任务缓存到workQueue中,此时线程池中闲置的线程回去workQueue中获取任务并执行。
(3)当workQueue缓冲队列已满,但是线程池中的线程数量小于maximumPoolSize时,会在线程池中创建新的线程去执行当前任务。
(4)当线程池中的线程数量等于maximumPoolSize时,此时会将任务交由handler去处理,按照相应的处理策略。
此时也就可以看出使用线程池来管理线程的优点:
当线程池中线程的数量大于corePoolSize时,如果某个线程到了闲置时间,会被自动销毁,使得线程池可以动态的控制线程的数量。
当然还有几个特殊的线程池对象我在这里就不介绍了,原理都是大同小异。
最后举例说明单一原则(SRP)和开闭原则(OCP)的具体体现:这里写图片描述其中单一原则很多时候界限不是很明确,但是它也是有一定的规则:例如1:要保证类和方法的职责单一,也就是说一个类一个方法只做一件事。
其中开闭原则指的是类只可以通过继承的方式进行扩展,绝不允许去修改它,除非这个类里面有明显的错误。但事实上在实际开发中很难做到,通常修改和继承时同时存在的。我的理解不是很深,望大家多提宝贵的建议,我们共同进步,今天就写到这里。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【设计模式】六大原则之一(单一职责与开闭原则)

【前言】 【单一职责原则】 1、单一职责原则的由来         初学者在编程的时候可能一开始会有这样的经历,使用一个类来实现很多的功能,新添加的甚至不相关的功能都放在一个类中来实现,煮成了一锅大杂...
  • liuziteng0228
  • liuziteng0228
  • 2017年02月01日 21:26
  • 506

面向对象六大原则----开闭原则

Java 中面向对象编程六大原则: 单一职责原则 英文名称是Single Responsibility Principle,简称SRP 开闭原则 英文全称是Open Close Principl...
  • Jo__yang
  • Jo__yang
  • 2016年07月27日 17:59
  • 2977

java设计六大原则之开闭原则(OCP)

抽象化是关键 定义抽象类或接口,使其可以有很多的具体实现(openfor extension) 预见所有的需要,在任何情况下都不再修改上层商业逻辑(closedfor modification) ...
  • u011659172
  • u011659172
  • 2016年05月26日 11:28
  • 2767

设计模式六大原则之--开闭原则(OCP)

1.开闭原则:Open Closed Principle, OCP) 定义:Software entities like classes, modules and functions s...
  • benbenxiongyuan
  • benbenxiongyuan
  • 2014年04月18日 15:21
  • 2012

敏捷开发之原则 五大原则 SRP OCP LSP DIP ISP

一、面向对象设计原则内容来自《敏捷开发:原则、模式与实例》 SRP单一职责原则(Single Responsibility Principle): 就一个类而言,应该仅有一个引起它变化的原因。 ...
  • qq_16234613
  • qq_16234613
  • 2017年02月08日 22:04
  • 1666

Java 设计模式(十) 单一职责原则(SRP)

单一职责原则(Single Responsibility Principle)SRP 基本概念单一职责原则 定义:应该有且仅有一个原因引起类的变更,也就是接口或类和职责的关系是一一对应的。 难点:职责...
  • qq_24451605
  • qq_24451605
  • 2016年05月08日 17:55
  • 2486

函数的单一职责原则(SRP)

结构化编程强调单一出口的原则,其目的在于增强函数流程的逻辑性。本身这个原则有些过于死板,但其保持代码逻辑性的目的是非常正确的。在面向对象设计,我们都知道要遵循单一职责原则(SRP),而函数也应遵循这一...
  • HorkyChen
  • HorkyChen
  • 2012年08月06日 23:08
  • 3091

面向对象的六大原则之 —— 单一原则

学习了何红辉、关爱民写的《Android设计模式》,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下 在开发中,我们要注意程序设计的六大原则: 一、单一责任原则 二、开闭原则 三、...
  • asd2603934
  • asd2603934
  • 2016年03月01日 10:58
  • 3941

android之设计模式六大原则

设计模式面向对象软件设计开发模式 目录(?)[-] 设计模式六大原则1单一职责原则设计模式六大原则2里氏替换原则设计模式六大原则3依赖倒置原则设计模式六大原则4接口隔离原则设计模式...
  • wanlong2713
  • wanlong2713
  • 2015年04月17日 09:34
  • 1681

单一责任原则

单一责任原则(Simple Responsibility Principle):又简称为SRP,通俗的解释就是一个类,应该仅有一个引起它变化的原因,很简单的解释就是一个类只负责一向责任就o了。 为什么...
  • ray8567548
  • ray8567548
  • 2013年08月15日 12:40
  • 444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Android如何在保证满足面向对象的单一原则(SRP)和开闭原则(OCP)的条件下,完成线程池的使用
举报原因:
原因补充:

(最多只允许输入30个字)