什么是适配器模式 网上已有很多的教程,不细讲了.可以参考:五分钟了解设计模式(3)---适配器模式 在适配器模式中,一定要识别清楚,Target Adaptee Adapter分别是哪些类或接口,这样才能知道是谁转成谁. Target: 最终给上下文调用的类 Adaptee: 被适配的类,即需要转成Target Adapter: 将Target和Adaptee连接起来,起转换作用 ThreadPoolExecutor中submit方法用到的适配器模式 ThreadPoolExecutor类提供了…
1,信息数据的查询,删除使用AsycnQueryHandler处理 AsycnQueryHandler继承了Handler public abstract class AsyncQueryHandler extends Handler 内部使用HandleThread来实现异步线程处理数据,成员变量也有一个Handler并拥有HandleThread的looper. private Handler mWorkerThreadHandler; public AsyncQueryHandler(Co…
Java中使用线程池技术一般都是使用Executors这个工厂类,它提供了非常简单方法来创建各种类型的线程池: public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorService newSingleThreadExecutor() public static ExecutorService newCachedThreadPool() public static Scheduled…
本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681826.html 在源码解析前,需要先理清线程池控制的运行状态,以及运行状态之间的任务调度 线程池控制状态(ctl ,原子操作 ,来自包java.util.concurrent.atomic ,保证线程并发安全),分为两大类:workerCount(当前运行的线程数)    runState(当前线程的运行状态) 1.runState运行状态: a>  RUN…
一.什么是线程池 为什么要使用线程池?在多线程并发开发中,线程的数量较多,且每个线程执行一定的时间后就结束了,下一个线程任务到来还需要重新创建线程,这样线程数量特别庞大的时候,频繁的创建线程和销毁线程需要一定时间而且增加系统的额外开销.基于这样的场景,线程池就出现了,线程池可以做到一个线程的任务处理完可以接受下一个任务,并不需要频繁的创建销毁,这样大大节省了时间和系统的开销. 线程池,顾名思义,就是一个池子,任务提交的到线程池后,线程池会在池子里边找有没有空闲的线程,如果没有,就会进入等待状态,…
最近看了一些android的源码,发现设计模式无处不在啊!感觉有点乱,于是决定要把设计模式好好梳理一下,于是有了这篇文章. 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因.如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责.而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因.通俗的说,即一个类只负责一项职责,将一组相关性很高的函数.数据封装到一个类中. 开闭原则 对于扩展是开放的,这意味着模块的行为是可以扩展的.当应用的需求改变时,我们可以对模块进行扩展,使其…
ThreadPoolExecutor 源码解析 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681826.html 在源码解析前,需要先理清线程池控制的运行状态,以及运行状态之间的任务调度 线程池控制状态(ctl ,原子操作 ,来自包java.util.concurrent.atomic ,保证线程并发安全), 分为两大类:workerCount(当前运行的线程数)    runState(当前线程的运行状态…
1.ThreadPoolExcuter运行实例 首先我们先看如何新建一个ThreadPoolExecutor去运行线程.然后深入到源码中去看ThreadPoolExecutor里面使如何运作的. public class Test { public static void main(String[] args){ /** * 新建一个线程池 * corePoolSize:2 * maximumPoolSize:10 * keepAliveTime:20 * unit:TimeUnit.SECON…
一.前言 JUC这部分还有线程池这一块没有分析,需要抓紧时间分析,下面开始ThreadPoolExecutor,其是线程池的基础,分析完了这个类会简化之后的分析,线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法.下面开始分析. 二.ThreadPoolExecutor数据结构 在ThreadPoolExecutor的内部,主要由BlockingQueue和AbstractQu…
1. 背景与简介 在Java中异步任务的处理,我们通常会使用Executor框架,而ThreadPoolExecutor是JUC为我们提供的线程池实现. 线程池的优点在于规避线程的频繁创建,对线程资源统一管理,在任务到达时能快速响应. 本文从JUC的ThreadPoolExecutor源码出发来剖析线程池的实现原理. 要比较轻松地理解ThreadPoolExecutor源码,最好需要对AbstractQueuedSynchronizer, BlockingQueue, FutureTask等类有…
目录 ThreadPoolExecutor 源码阅读 Executor 框架 Executor ExecutorService AbstractExecutorService 构造器 状态 Worker 与任务调度 提交任务 线程池关闭 ThreadPoolExecutor 源码阅读 读了一下 ThreadPoolExecutor 的源码(JDK 11), 简单的做个笔记. Executor 框架 Executor Executor 接口只有一个方法: public interface Exec…
线程池学习 以下所有内容以及源码分析都是基于JDK1.8的,请知悉. 我写博客就真的比较没有顺序了,这可能跟我的学习方式有关,我自己也觉得这样挺不好的,但是没办法说服自己去改变,所以也只能这样想到什么学什么了. ​ 池化技术真的是一门在我看来非常牛逼的技术,因为它做到了在有限资源内实现了资源利用的最大化,这让我想到了一门课程,那就是运筹学,当时在上运筹学的时候就经常做这种类似的问题. ​ 言归正传吧,我接下来会进行一次线程池方面知识点的学习,也会记录下来分享给大家. 线程池的内容当中有涉及到AQ…
系列目录 [详解]ThreadPoolExecutor源码阅读(一) [详解]ThreadPoolExecutor源码阅读(二) [详解]ThreadPoolExecutor源码阅读(三) 线程数量的维护 线程池的大小有两个重要的参数,一个是corePoolSize(核心线程池大小),另一个是maximumPoolSize(最大线程大小).线程池主要根据这两个参数对线程池中线程的数量进行维护. 需要注意的是,线程池创建之初是没有任何可用线程的.只有在有任务到达后,才开始创建线程,并复用线程. 注…
系列目录 [详解]ThreadPoolExecutor源码阅读(一) [详解]ThreadPoolExecutor源码阅读(二) [详解]ThreadPoolExecutor源码阅读(三) AQS在Worker中的应用——标识空闲or非空闲工作线程 我对这个上锁一直搞不懂,虽然有注释说是允许中断啥的,但是还是一头雾水,就打算直接看代码分析.第一眼看到这个lock的时候,我就吓到了. 产生了第一个问题:"啥,一上锁,多个线程不是就要同步排队了嘛? 而且也没这必要啊! " 看清楚了才知道,…
系列目录 [详解]ThreadPoolExecutor源码阅读(一) [详解]ThreadPoolExecutor源码阅读(二) [详解]ThreadPoolExecutor源码阅读(三) 工作原理简介 ThreadPoolExecutor会创建一组工作线程,每当一个工作线程完成其任务的时候,会向任务队列获取新的任务执行.如果任务队列为空,获取任务的线程将被阻塞.不出意外的话,工作线程会一直工作,直到线程池主动释放空闲线程,或者随着线程池的终结而结束. 工作者线程 在ThreadPoolExec…
目录 初始化 ctl变量 添加任务 addWorker方法 worker实现 执行任务 关闭连接池 参考 初始化 ThreadPoolExecutor重载了多个构造方法,不过最终都是调用的同一个: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory t…
Java中使用线程池技术一般都是使用Executors这个工厂类,它提供了非常简单方法来创建各种类型的线程池: public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorService newSingleThreadExecutor() public static ExecutorService newCachedThreadPool() public static Scheduled…
一.前言 闲来无事,博主有重新翻看了一下jdk1.8版的ThreadPoolExecutor源码,看后写此笔记,画个圈圈,做个记录,这段源码,我看过,到处一游,嘻嘻~~ 二.ThreadPoolExecutor数据结构 在ThreadPoolExecutor的内部,主要由BlockingQueue和AbstractQueuedSynchronizer对其提供支持.在锁框架中,AbstractQueuedSynchronizer抽象类可以毫不夸张的说,占据着核心地位,它提供了一个基于FIFO队列,…
在学习concurrent库时遇到了一些问题,后来搞清楚了,这里记录一下 先看个例子: import time from concurrent.futures import ThreadPoolExecutor def foo(): print('enter at {} ...'.format(time.strftime('%X'))) time.sleep(5) print('exit at {} ...'.format(time.strftime('%X'))) executor = Thr…
一.线程池的介绍 线程池一种性能优化的重要手段.优化点在于创建线程和销毁线程会带来资源和时间上的消耗,而且线程池可以对线程进行管理,则可以减少这种损耗. 使用线程池的好处如下: 降低资源的消耗 提高响应的速度 提高线程的可管理性 二.线程池的使用 public class ThreadPoolExecutorDemo { static class Worker implements Runnable{ @Override public void run() { try { Thread.slee…
       在线程池出现之前,每次需要使用线程,都得创建一个线程.但是,在java的运行环境中,创建一个线程是非常耗费资源和时间的.是否可以把线程重复利用,减少线程的创建次数.基于此,java1.5中引入了java的线程池管理.试想如果让你来实现一个线程池的管理,你会怎么实现呢?        下面详细分析java ThreadPoolExecutor类的线程池原理.         线程池ThreadPoolExecutor的使用方,调用方式,是把任务提交到线程池,具体线程的创建和执行是透明…
从网络上找的设计模式, 很全面,只要把UML类图看懂了, 照着类图将代码实现是很容易的事情. 步骤: 先看懂类图, 然后将代码实现, 之后再看文字 http://c.biancheng.net/design_pattern/ https://www.runoob.com/design-pattern/abstract-factory-pattern.html 7大设计原则: 1: 单一职责原则: 类应该只有一个职责,或者功能 2: 接口隔离原则: 一个类不应该依赖与他不相关,不需要的接口, 一个…
引言 在web开发中,一个简化的处理流程就是:客户端发起请求,然后服务端进行处理,最后返回相关数据.不管对于哪种语言哪种框架,除去细节的处理,简化后的模型都是一样的.客户端要发起请求,首先需要一个标识,通常情况下是URL,通过这个标识将请求发送给服务端的某个具体处理程序,在这个过程中,请求可能会经历一系列全局处理,比如验证.授权.URL解析等,然后定位到某个处理程序进行业务处理,最后将生成的数据返回客户端,客户端将数据结合视图模版呈现出合适的样式.这个过程涉及到的模块比较多,本文只探讨前半部分,…
就目前来说Retrofit2使用的已相当的广泛,那么我们先来了解下两个问题: 1 . 什么是Retrofit? Retrofit是针对于Android/Java的.基于okHttp的.一种轻量级且安全的.并使用注解方式的网络请求框架. 2 . 我们为什么要使用Retrofit,它有哪些优势? 首先,Retrofit使用注解方式,大大简化了我们的URL拼写形式,而且注解含义一目了然,简单易懂: 其次,Retrofit使用简单,结构层次分明,每一步都能清晰的表达出之所以要使用的寓意: 再者,Retr…
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的理解和认识简要的做个笔记,有异议或者不解的,可以直接留言. 什么是ProGuard工具? ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类.字段和函数等,达到压缩.优化和混淆代码的功能.具体来说,使用ProGuard工具…
引言: 之前一篇文章梳理了String的不变性原则,还提到了一段源码中注释"avoid getfield opcode",当时通过查阅资料发现,这是为了防止 getfield(获取指定类的实例域,并将其值压入到栈顶)这个操作码的执行,这篇文章想从字节码的角度去分析一下. 先看一段代码吧 /** * Created by chenqimiao on 16/11/29. */ public class Main { public char[] chars = new char[10]; p…
在项目\frameworks\base\wifi\java\android\net\wifi\WifiStateMachine.java里面,有如下的代码,是设置wifi热点保持状态的:如下: private class HotspotAutoDisableObserver extends ContentObserver { public HotspotAutoDisableObserver(Handler handler) { super(handler); mContext.getConte…
rxjava源码中的线程知识 rx的最精简的总结就是:异步 这里说一下以下的五个类 1.Future2.ConcurrentLinkedQueue3.volatile关键字4.AtomicReference 5.ScheduledExecutorService 一.Future类 1.Future的唯一实现类是FutureTask.        2.这样就可以把Callable放到FutureTask.然后用FutureTask可以Thread thread = new Thread(futu…
这篇主要说一下在源码中jquery对象是怎样设计实现的,下面是相关代码的简化版本: (function( window, undefined ) { // code 定义变量 jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); }, // code 定义变量 jQuery.fn = jQuery.prototype = { jquery: core…
jquery源码中涉及了大量原生js中的知识和概念,文章是我在学习两者的过程中进行的整理和总结,有不对的地方欢迎大家指正. 本文使用的jq版本为2.0.3,附上压缩和未压缩版本地址: http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.js http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js 查看源码可以发现整体结构是这样: (function( window, undefined…