Cyrus Land
  • 首页
  • 归档
  • 标签
  • 关于

Lock(四)synchronized 的语言实现

monitor 指令在 Lock(二)AQS 源码分析以及 Lock 的实现 这篇文章里介绍了基于 AQS 的 Lock,它是双向链表的排队队列和系统调用 futex 实现的 其实 java 语言规范里自带了 Lock 的实现:synchronized 关键字,下面看看 ART 是怎么实现它的 先写一个使用了 synchronized 的测试方法 package com.example.myapp
2021-02-08
#synchronized

Lock(三)利用 Lock 实现 Condition

Condition 简介Condition 主要有两类方法: await,释放锁并阻塞线程直到 signal 被调用,恢复后会重新获得锁 signal,唤醒阻塞在这个 Condition 上的一个或全部线程 利用条件变量前需要先获得锁 所以 Condition 的所有方法都需要加锁 lock.lock(); // ... condition.await(); // ... lock.unloc
2021-01-24
#Lock #Condition

常见面试题备忘

设计模式 观察者(Observer),LiveData 单例(Singleton),double check 适配器(Adapter),RecyclerView.Adapter 装饰器(Decorator),ContextWrapper 代理模式(Proxy),例如 VPN、Retrofit 责任链(Chain of Responsibility),OkHttp 大体上就是个责任链模式 建造者(B
2021-01-19
#面试 #备忘录 #笔记 #知识点

Lock(二)AQS 源码分析以及 Lock 的实现

AQS 是 Semaphore、ReentrantLock 和 ReentrantReadWriteLock 的基础,它们紧密地结合在一块,分析 AQS 除了要明晰排队队列的操作,还要结合 Semaphore、ReentrantLock 和 ReentrantReadWriteLock 看看是怎么利用排队队列实现锁和信号量的 AQS 是基于 CLH 锁修改而来的,它的排队队列也是双向链表publi
2021-01-13
#Lock #AQS

Lock(一)AQS 基础

自旋锁(Spin Lock)获得锁的时候,不阻塞线程,而是跟平常一样继续获得 CPU 时间,继续执行代码/逻辑,那就是自旋锁;比如下面的 lock() // 一个简单的自旋锁的实现 class SpinLock { private val cas = AtomicReference<Thread>() fun lock() { w
2021-01-10
#Lock #AQS

Android 图形栈(三)render thread

接着上一篇文章,在上篇文章里我们知道了 ui thread 在 view drawing 阶段产生了 DisplayList,而 render thread 会根据 DisplayList 执行真正的渲染工作,主要是 DrawFrameTask.syncFrameState 和 CanvasContext.draw 这两个方法 syncFrameState重要的方法有三个:makeCurrent,
2020-12-27
#vsync #render thread

Android 图形栈(二)ui thread

从一段 systrace 开始 这是一段 systrace 记录,看得出来页面是比较流畅的,ui thread 全都在一个 VSYNC_app 内完成绘制,surfaceflinger 也在一个 VSYNC_sf 内完成各个层的合成;但有没发现在 ui thread 完成 doFrame 后,总是会有一个 ReaderThread 跟在后面,看名字像是跟渲染相关的线程,它跟 ui 绘制有关系吗?平
2020-12-13
#vsync #ui thread

Android 图形栈(一)vsync

android 的垂直同步模型(vsync)是隐藏在 view 系统后面的很重要的一块,它控制着 view 渲染的节奏;而且 vsync 还是比较复杂的,我们从下到上,先从最熟悉的 View.invalidate 讲起,看看简单的一个 invalidate 后面隐藏着多么复杂的工作 从 View.invalidate() 说起 看上图,View.invalidate() 主要做了两件事: 将 V
2020-12-02
#vsync #invalidate

Scoped Storage(沙盒)

以前的存储访问权限先看看以前( < 10/Q )的存储访问权限是怎样的 从 APP 目录(app-specific directories)的角度看,可以分为: 内部存储(app-specific directories in internal storage) 对于 app 自己,无需申请任何读/写权限 对于其他 app,没有访问权限 外部存储(app-specific direct
2020-11-19
#Scoped Storage

starting window 和 windowDisablePreview

问题中午和同事聊天时,提到一个问题:设计把爱范儿 app 的启动页改成暗黑样式,本来很简单的一个改动,测试却发现启动会有闪屏;下午我看了下效果,发现确实有问题: 把启动页的图片换成暗黑主体的图片后,冷/热启动都会有从白色到黑色的闪动 同事给的 bug fixed 是 windowDisablePreview = true,这导致 app 热启动时,会有很长的一段延迟 starting wind
2020-11-11
#windowDisablePreview #starting window
1…4567

搜索

Hexo Fluid