- 博客(25)
- 资源 (4)
- 收藏
- 关注
原创 java原子类详解
java原子类详解什么原子类原子类是具有原子性的类,原子性的意思是对于一组操作,要么全部执行成功,要么全部执行失败,不能只有其中某几个执行成功。原子类作用作用和锁有类似之处,是为了保证并发情况下的线程安全。相对于锁的优势粒度更细原子变量可以把竞争范围缩小到变量级别,通常情况下锁的粒度也大于原子变量的粒度效率更高除了在高并发之外,使用原子类的效率往往比使用同步互斥锁的效率更高,因为原子类底层利用了CAS,不会阻塞线程。原子类种类在JDK中J.U.C包下提供了种类丰富的原子类,
2020-07-21 17:16:56
8368
原创 java线程池详解及源码解析
线程池详解文章目录线程池详解线程池参数常用的六种线程池FixedThreadPoolCachedThreadPoolScheduledThreadPoolSingleThreadExecutorSingleThreadScheduledExecutor几种线程池参数对比ForkJoinPool核心问题拒绝策略拒绝时机AbortPolicyDiscardPolicyDiscardOldestPolicyCallerRunsPolicy常用几种阻塞队列LinkedBlockingQueueSynchronou
2020-07-16 16:49:05
278
原创 Activity、Window和View的关系源码分析
Activity、Window和View的关系文章目录Activity、Window和View的关系Activity的创建Window的创建View的创建WindowManager的addViewmWindowSession.addToDisplay触摸事件是怎么传递到Activity的总结要说它们之间的关系,就要从Activity的创建说起Activity的创建在这里我们暂时不分析具体的startActivity启动过程,直接看创建Activity的部分,调用startActivity新启动了一个
2020-05-30 16:20:09
384
原创 AIDL设计思路
AIDL设计思路文章目录AIDL设计思路AIDL1.实现一个自定义的AIDL2.IDE自动生成IMyService.java文件3.本地IPC-Stub本地的使用4.远端IPC使用5.aidl整体流程AIDL1.实现一个自定义的AIDL// IMyService.aidlpackage com.yetao.testaidl;interface IMyService { /** * Demonstrates some basic types that you can use a
2020-05-14 17:48:31
269
原创 Android资源加载流程
Android资源加载流程从使用到原理使用首先来看一个从资源string获取字符串的使用public class ResourceActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { supe...
2020-04-22 22:07:18
1239
原创 ffmpeg推拉流优化方案
ffmpeg推拉流优化方案文章目录ffmpeg推拉流优化方案一、卡顿优化设备老旧视频流音视频不同步网络二、延时优化三、传输协议优化四、首屏秒开优化服务器做优化客户端优化五、弱网优化六、DNS劫持优化七、服务端cdn优化主要从以下几点来优化卡顿优化延时优化传输协议优化首屏秒开优化弱网优化DNS劫持优化服务端cdn优化一、卡顿优化视频播放端卡顿主要有以下几点原因:设备老旧...
2020-04-20 17:02:46
8272
1
原创 RxJava2核心源码解析
文章目录RxJava2源码解析一、简介二、从代码看设计1、核心设计--观察者模式2、锦上添花--装饰者模式2.1 发射源切换线程2.2 订阅者切换线程总结RxJava2源码解析一、简介RxJava是一款基于事件流的链式调用,支持切换线程,使用简单。接下来,会根据RxJava2版本进行分析。本文不会讲具体详细的操作符使用,主要从下面几个问题去看待源码是如何设计实现的怎么做到响应事件发射...
2020-04-03 16:15:57
250
原创 源码分析Handler+Looper+MessageQueue消息模型
文章目录源码分析Handler消息模型Handler职责1.Message的发送者2.Message的处理者3.Message的移除者Looper职责Looper的创建Looper循环MessageQueue职责构造函数和部分成员变量消息入队列消息出队列消息移除退出消息循环MessageMessage设计复用总结源码分析Handler消息模型Handler职责从开发者角度来看,可分为M...
2020-03-26 15:05:21
528
原创 基于OKhttp下载工具YTDownloader
YTDownloader最近对网络下载这一块比较感兴趣,所以专门整理和写了一个简易的下载库–YTDownload特性基于Retrofit和Okhttp3来请求网络基于RxJava,支持链式调用支持断点续传,默认开启支持串行、和并行批量下载支持进度回调自动校验服务器文件是否更改(前提,url对应文件还未下好)集成在app的build.gradle中添加依赖 //仓库m...
2020-03-21 01:24:10
978
原创 理解Java锁机制
理解Java锁机制文章目录理解Java锁机制1. synchronizedsynchronized的几种使用方式synchronized的实现原理Monitor2. lock3. volatile关键字3. 乐观锁-悲观锁(主线程锁不锁住同步资源)CAS机制问题悲观锁4. 自旋锁和适应性自旋锁(均不阻塞线程,是否有自旋次数限制)5. 公平锁-非公平锁(是否允许插队)6. 可重入锁-非可重入锁(是...
2020-03-13 15:48:38
288
转载 深入理解java锁机制
深入理解java锁机制文章目录深入理解java锁机制前言1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁Java对象头Monitor无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非...
2020-03-12 14:26:22
386
原创 生产消费模型-lock和synchronized实现
生产消费模型-lock和synchronized实现lock实现AB循环输出同一Lock锁双条件分别控制AB线程public class TestThread { public static void main(String[] args) { //new出可重入lock锁 Lock lock = new ReentrantLock(); ...
2020-03-11 11:14:27
179
原创 ThreadLocal-从源码看设计
ThreadLocal源码分析一、ThreadLocal定义ThreadLocal提供线程局部变量。这些变量与它们在每个线程中访问,每个线程有自己的、独立初始化的变量副本,实例通常是私有的类中希望将状态与线程关联的静态字段。即在每个显示访问当前实例对象,都会获取各自线程对应的值,不会相互影响,不存在线程安全问题,也不会影响程序执行的性能。由于在各自线程存储对应的值,所以内存消耗会比直接使用实际...
2020-03-10 16:24:00
159
原创 HTTP1.0、1.1和2.0区别
HTTP1.0、1.1和2.0区别Http原理请点击阅读 点击查看HTTP 1.0Http1.0是老的HTTP协议标准,规定了客户端和服务器只能保持短暂的连接,请求完成后就完毕,每次客户端请求都需要建立一次TCP连接,请求完就断开,不保存每次请求的状态。由于连接和关闭会消耗大量服务器和客户端资源,严重影响了客户端和服务端的性能。例如加载一个网页地址,有很多JS和CSS文件,每次请求都建立一次...
2020-03-09 16:54:03
263
原创 HTTP和HTTPS的理解
HTTP和HTTPS的理解本文有部分摘录自他人博客、书籍资料,请提出。一、HTTP1.简介HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将HTML(超文本标记语言)文档从Web服务器传送到Web浏览器。首先我们需要了解网络OSI模型七层协议(1)网络七层协议...
2020-03-09 16:21:14
608
原创 螺旋算法
螺旋算法算法题目题来源–LeetCode(https://leetcode-cn.com/problems/spiral-matrix)给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7...
2020-03-06 10:56:13
793
原创 深入c++层分析Serializable和Parcelable的区别
源码角度分析Serializable和Parcelable的区别一、Serializable的源码分析Serializable是为了保存对象的属性到本地文件、网络传输等方便数据传输,由于对应使用了ObjectInputStream和ObjectOutputStream进行读写,所以在读取过程中会使用了反射以及产生过多的临时变量。由于Serializable的性能过低,不太适用于性能资源相对紧...
2020-03-05 19:21:21
796
原创 fastJson序列化和反序列化流程
fastJson序列化和反序列化流程一、核心源码1、SerializeWriter该类主要用于序列化,有以下成员变量public final class SerializeWriter extends Writer { /** * 储存序列化结果的字段 */ protected char buf[]; /** * 写入缓存的长度 ...
2020-03-04 17:31:33
1590
原创 源码分析Gson序列化和反序列化流程
源码分析Gson序列化和反序列化流程一、核心源码1.核心对象— TypeAdapter 类型适配器,里面 public abstract class TypeAdapter<T> { /** * 该方法用于toJson时写入数据序列化 **/ public abstract void write(JsonWriter out, T value) thro...
2019-12-12 16:46:08
482
原创 Java虚拟机内存回收
感谢周志明所著的《深入理解Java虚拟机》一书。下面附上了一些我自己的理解。当说到java堆的垃圾回收,就会想到它的内存分配和回收算法。下面就详细介绍我的理解。一、内存分配。1.新对象优先分配到新生代Eden区中 内存优先分配在新生代Eden区中,该区域经过一次GC,大概会有98%新对象被回收掉,剩余的进入Survivor区中。2.大对象直接进入老年代 大对象是指需要大量连续内存空间的...
2018-04-03 18:27:16
285
原创 Java虚拟机组成部分及作用
感谢周志明所著的《深入理解Java虚拟机》一书。下面附上了一些我自己的理解。java虚拟机(JVM)当我们讨论到它的组成部分的时候,有人可能很多都会说是以栈和堆,但是实际上远远不止这两个部分。下面我们来讲讲他的组成部分:JVM分为两个区域:一、线程私有区域 包含虚拟机栈(通常称为Java栈)、本地方法栈(储存JNI)、程序计数器1、虚拟机栈...
2018-04-03 18:25:54
6675
原创 java文件读写删除等操作
将byte[]流写入文件 /** * 写byte[]流到文件中 * @param bytes * @param path * @return */ public static boolean writeByteToDisk(byte[] bytes,String path){ BufferedOutputStream bos...
2018-03-29 18:13:18
816
原创 java遍历文件夹(递归和非递归)
递归遍历: /** * 遍历文件() * @param rootFile 文件夹 * @return */ public static List<File> findAllFiles(File rootFile){ List<File> results = new ArrayList<>();...
2018-03-29 16:53:10
1537
原创 Android SystemServer启动流程详解(基于sdk版本6.0.1)
本文基于Android系统版本6.0.1,由于系统重构与4.4.4启动过程存在差异。Java类的入口是main()方法,SystemServer的main()方法代码如下:new SystemServer().run();由此开始,以SystemServer的run()作为系统启动方法,接下来我们来看run()方法做了哪些事情。private void run() {
2018-02-01 11:37:21
342
原创 带阻尼效果的scrollview,仿QQ空间
import android.content.Context;import android.graphics.Rect;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ImageView;import android.widget.ScrollView;
2015-10-20 16:53:32
809
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人