在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:要保证类和方法的职责单一,也就是说一个类一个方法只做一件事。
其中开闭原则指的是类只可以通过继承的方式进行扩展,绝不允许去修改它,除非这个类里面有明显的错误。但事实上在实际开发中很难做到,通常修改和继承时同时存在的。我的理解不是很深,望大家多提宝贵的建议,我们共同进步,今天就写到这里。

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

OOD三个设计原则:SRP(单一职责原则)、OCP(开闭原则)、LSP(Liskov替换原则)

单一职责原则(SRP : Single Response Principle) 就一个类而言,应该仅有一个引起它变化的原因。 在这里,职责的定义是: “变化的原因”。 对于何时遵循SRP有以下的...
  • sgear
  • sgear
  • 2011年11月08日 18:20
  • 682

面向对象基础:OO的五大原则是指SRP、OCP、LSP、DIP、ISP

OO的五大原则是指SRP、OCP、LSP、DIP、ISP。 1. SRP(Single Responsibility Principle单一职责原则)  单一职责很容易理解,也很容易实现。...

面向对象设计之单一职责原则(SRP)

单一职责的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成:        目的:高内聚,低耦合        单一职责也就是单一变化原因。       ...

单一职责原则(SRP)--深度剖析--面向对象设计(OOD)

单一职责就是指一个类应该专注于做一件事。现实生活中也存在诸如此类的问题:“一个人可能身兼数职,甚至于这些职责彼此关系不大,那么他可能无法做好所有职责内的事情,所以,还是专人专管比较好。”我们在设计类的...

面向对象设计的原则--开闭原则(OCP)

软件模块对扩展是开放的 当需求发生改变时,可以对模块进行扩展 软件模块对修改是封闭的 对模块进行扩展时, 无须改动模块的源代码。 似乎是矛盾的 ? ———————————————————————...

面向对象设计原则--开闭原则(OCP)

OCP–Closed for Modification;Open for Extension. 开闭原则要求软件有一个良好的基本结构,确保面对变化的时候,仅仅扩展而不是修改现有对象的组织框架就可以随需...

面向对象--单一职责原则和开闭原则学习(简易ImageLoader)

一、概述这篇是读《Android源码设计模式解析与实战》的第一篇记录,今天学习了面向对象六大原则中的其二:单一职责原则和开闭原则。单一职责原则简单来说一个类只实现一个功能;开闭原则则是对于扩展是开放的...

面向对象设计原则——单一职责原则(SRP)

面向对象设计原则——单一职责原则(SRP)tags:设计模式 The single responsiblity principle states that every object should ...

面向对象设计的原则--单一职责原则(SRP)

概述 职责: 是引起变化的原因如果有多于一个的动机去改变一个类,这个类就具有多于一个职责 把多个职责耦合在一起,一个的变化可能会削弱或者抑制这个类完成其他职责的能力 SRP : 对一个类而言, 应该仅...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Android如何在保证满足面向对象的单一原则(SRP)和开闭原则(OCP)的条件下,完成线程池的使用
举报原因:
原因补充:

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