Java-BockingQueue阻塞队列 Queue接口Queue队列的特征是FIFO——先进先出。只有队尾可以进行插入操作,只有队头可以进行删除操作。 Java中的Queue继承了Collection接口,并额外实现了以下方法 12345678public interface Queue<E> extends Collection<E> { boolean add(E e); boolean 2018-12-24 Java
Android性能优化 针对Android中的性能优化,主要有以下几个有效的优化方法: 布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView/RecyclerView及Bitmap优化、线程优化、其他 布局优化 核心思想就是:减少布局文件的层级。 删除布局中无用的控件和层次,其次有选择的使用性能比较低的ViewGroup。可以使用RelativeLayout来减少嵌套,从而达到减少层级的目 2018-12-20 Android
Java-ReentrantLock原理及解析 一般的锁都是配合synchronized使用的,实际上在java.util.concurrent.locks还提供了其他几个锁的实现,拥有更加强大的功能和更好的性能。 锁的分类可重入锁 可重入锁:任意线程在获取该锁后能够再次获取锁时不会被阻塞。 当前线程恶可以反复加锁,但必须释放同样多次数的锁,否则会导致锁不会释放。可以避免死锁 原理通过组合自定义同步器(AQS)实现锁的获取与释放 再次进行l 2018-12-19 Java
ThreadLocal原理分析 ThreadLocal详解 在前几节Handler详解中介绍 如何获取Looper对象时提及了是利用ThreadLocal来进行Looper的存储与获取。 1.初步理解ThreadLocalThreadLocal,线程本地存储区(Thread Local Storage,简称为TLS) ThreadLocal的定义为:用于提供线程变量,在多线程环境中可以保证各个线程的变量独立于其他线程里的变量 2018-12-09 源码解析
Handler机制源码解析(二) 主要包括Handler其他使用知识点 1. 子线程创建Handler对象 不可以直接在子线程创建Handler对象,因为Handler对象必须要绑定一个Looper,才可以使用。 若在子线程需要使用Handler,则需要先创建一个Looper对象即执行Looper.prepare()然后再创建Handler对象时调用Looper.myLooper()获取Looper对象传入方法,最后调用Loop 2018-10-07 源码解析
Handler机制源码解析 主要的内容包括Handler的机制以及四个组成部分和源码的分析 下面的代码分析都是基于Android8.0 - Oreo的源代码 2018-05-14 Android 源码解析
JVM相关及其拓展(三) -- 虚拟机类加载器 虚拟机类加载器定义:在类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码块称为“类加载器”。 例如:编写的是.java文件,代码运行后变成.class文件,类加载器就是加载.class文件。 不同的类加载器加载同一个类时,得到的两个类也是不相等的。 Java类加载器分类:1.系统提供 2018-04-16 JVM
常见算法题整理 - 来自《剑指Offer》 数据结构 算法 概念 链表 广度优先搜索 位操作 树、单词查找树、图 深度优先搜索 内存(堆、栈) 栈和队列 二分查找 递归 堆 归并排序 动态规划 向量、数组列表 快排 时间、空间复杂度 散列表 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。(要求线性时间复杂度,即$O(1)$) 实例:输入:[1, 2018-01-16 算法