图解Java线程安全

什么是线程

按操作系统中的描述,线程是 CPU 调度的最小单元,直观来说线程就是代码按顺序执行下来,执行完毕就结束的一条线。

举个 🌰,富土康的一个组装车间相当于 CPU ,而线程就是当前车间里的一条条作业流水线。为了提高产能和效率,车间里一般都会有多条流水线同时作业。同样在我们 Android 开发中多线程可以说是随处可见了,如执行耗时操作,网络请求、文件读写、数据库读写等等都会开单独的子线程来执行。

那么你的线程是安全的吗?线程安全的原理又是什么呢?(本文内容是个人学习总结浅见,如有错误的地方,望大佬们轻拍指正)

线程安全

了解线程安全的之前先来了解一下 Java 的内存模型,先搞清楚线程是怎么工作的。

Java 内存模型 - JMM

什么是 JMM

JMM(Java Memory Model),是一种基于计算机内存模型(定义了共享内存系统中多线程程序读写操作行为的规范),屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。保证共享内存的原子性可见性有序性

能用图的地方尽量不废话,先来看一张图:
image

阅读更多
本门藏经阁-AndroidX

自盘谷开天辟地后,上古大神 Andy Rubin 开宗立派创立 Android 门,历经数十载,宗门日渐壮大,门下弟子遍布整个九州大陆。坊间流传,其门下弟子最善以身着格子衬衣,牛仔裤,背黑色双肩包装扮行走江湖,那其中的头顶光滑锃亮者更是其中的佼佼强者,修为绝顶。

本门藏经阁 - AndroidX

藏经阁,历来为各大门派收藏本门绝学之所在。
本门亦不例外,这 AndroidX 中尽数收录了宗门无上武功心法秘笈,其中多数源自宗门上古宝典支持库( Support Library Packages ),经过历代宗主不断参悟,优化改进,现已形成一套完整修炼体系,为门下弟子修行所用。后世若是有门人参透更高武学,亦将收录于此,造福后世弟子。

阅读更多
Jetpack 之 Navigation 初探

简介

Google 2018 I/O大会上,Google正式推出了Android/Jetpack,其中隆重推出了一个新的架构组件:Navigation

Google 官方介绍:

作为构建您的应用内界面的框架,重点是让单 Activity 应用成为首选架构。利用 Navigation 组件对 Fragment 的原生支持,您可以获得架构组件的所有好处(例如生命周期和 ViewModel),同时让此组件为您处理 FragmentTransaction 的复杂性。此外,Navigation组件还可以让您声明我们为您处理的转场。它可以自动构建正确的“向上”和“返回”行为,包含对深层链接的完整支持,并提供了帮助程序,用于将导航关联到合适的 UI 小部件,例如抽屉式导航栏和底部导航。

阅读更多
Handler浅析

Handler 相信每一个做 Android 开发的小伙伴都非常熟悉了,最常用的场景就是在子线程中进行数据操作然后通过 Handler 消息机制通知到 UI 线程来更新 UI ,地球人都知道在子线程中更新 UI 一般情况下都会报错。是吧!咱用的贼溜,各种姿势发送 Handler 消息都熟练掌握,但是如果这时候出去面试被问到“ Handler 原理”,“消息是怎么从子线程发送到主线程的”等等 Handler 底层的实现,就懵逼了。

虽然网上关于分析 Handler 的博客文章非常多,已经有很多大佬分析的非常透彻清楚了,但我这里还是想在看过大佬们的文章后自己再写一篇,一方面是让自己加深理解,另一方面就是想分享所学知识(分享会让知识变的更多)。

看了很多大佬去大厂面试的面经,Handler几乎是必问的,所以我们更加必须知其所以然了。

一、Handler是啥

1.1 一句话描述 Handler

简单来说Handler是结合线程消息队列来发送和处理 MessageRunnable 对象来实现线程间通信的工具。

阅读更多
Kotlin初探

Kotlin!这个词想必作为一名Android开发者的你已经不陌生,无论是初级新人还是资深大佬,多多少少有听说过甚至已经开始用起来了,毕竟我们都是跟着Google爸爸混的,最近2年Google一直在和Kotlin搞事情。
相信很多同学在来这里之前心中已经有来很多疑惑,问号。
——这个语言难不难学啊?我Java都还没精通,又来一门新语言。
——这玩意比起Java优势在哪?值不值我花精力去研究?我Java用的麻溜,学他干嘛。
——才推出不久,性能会不会有问题,稳不稳啊!先观望再说。
——现在技术更新太快了,我学不过来啊!崩溃ing……

如果你心中有以上疑惑还在纠结,还没下定决心要不要开始上手这门Google新宠的话。没关系,现在就给您安排上。

PS:这篇文章旨在带站在门口观望的同学大概了解一下Kotlin,没有任何深入的东西(暴露了我也是初学,哈哈),希望看完后心中对Kotlin有个大概的概念,然后下定决心走进来!

阅读更多
adb 常用命令

adb常用命令总结

1.安装应用

1
adb install -r [apkName]

-r参数为覆盖安装,apkName为全路径 目录+apkName

2.卸载应用

1
adb uninstall [packageName]

3.启动应用

1
adb shell am start -n [packageName/appName]

注意appName 使用全路径 packageName+appName

阅读更多