喻志强(Xeon)
这个作者很懒,什么都没留下…
展开
-
kotlin协程之 协程概念的具像化
从代码的角度详细解释到底什么是协程,以及我们应该如何的理解它原创 2024-08-28 15:48:08 · 82 阅读 · 0 评论 -
kotlin协程之runBlocking
上一篇:Callback转挂起函数文章中,介绍了在Kotlin协程中如何把传统的回调风格的异步操作转换为协程风格的挂起函数,这个在开发过程中是非常常用的,主要用于把 callback 风格的代码转换为协程中的挂起函数,以便于我们在协程环境中调用。但是,有时候我们也会遇到一些特殊的情况,比如我们需要在线程中调用已存在的协程代码,并且希望这个线程能够阻塞等待协程执行完毕,这时候就需要用到函数了。的核心作用是阻塞当前线程并等待协程执行完毕,主要用于在线程中调用协程代码并且希望阻塞等待协程执行完毕的场景中。原创 2024-08-13 14:18:30 · 110 阅读 · 0 评论 -
kotlin 协程之Callback转挂起函数
在 Kotlin 协程中可以通过挂起函数来实现异步操作的串行化,但是在日常开发场景中,大部分项目都是java和kotlin并存的,老旧的Java代码除非有需求,否则不会轻易改动重构。即使项目是纯kotlin开发的,也会有一些java代码实现的三方库,因此,我们很难规避掉所有的 Callback,而且Callback是一种非常常见的设计模式,我们经常会在项目中看到。当然,在协程中,我们也可以使用Callback。原创 2024-06-25 08:00:00 · 424 阅读 · 0 评论 -
Kotlin 协程真的轻量吗?
本文探讨了Kotlin协程是否真的轻量,通过对比协程和线程的实现,指出协程在开发使用上的轻量性,如非阻塞式设计、简洁的代码和自动线程管理。然而,从底层执行原理来看,协程仍然依赖于线程,因此轻量性主要体现在开发者体验上。原创 2024-06-12 17:00:50 · 678 阅读 · 0 评论 -
kotlin 协程之初识挂起函数
本文介绍了Kotlin协程中的挂起函数,包括挂起函数的概念、自定义方法以及挂起和恢复的本质。挂起函数通过`suspend`关键字标识,允许在不阻塞线程的情况下进行异步操作。挂起函数只能在协程或另一挂起函数中调用。文章通过代码示例和反编译分析揭示了挂起函数如何在后台执行并恢复执行的机制。原创 2024-06-12 16:56:10 · 576 阅读 · 0 评论 -
Kotlin 协程:从基础概念到开发实践
上一篇文章深入理解Android多线程开发:场景应用与解决方案解析针对Android开发中的多线程应用场景和相应的解决方案做了一个梳理。资源复用和优化切线程任务编排并结合示例说明了Kotlin协程在处理上述问题时的优势。Kotlin协程自从2018年底成为kotlin语言的正式特性后,到现在已经5个年头了。而kotlin这门语言也在最近正式推出了2.0版本,带来了更好的支持多平台开发以及更快的编译速度。我自己算是比较早就开始尝试使用协程来解决开发中的各种需求。原创 2024-06-11 09:32:19 · 689 阅读 · 0 评论 -
深入理解Android多线程开发:场景应用与解决方案解析
在专栏之前的文章中,我们了解了并发、线程、线程安全、线程池等多线程开发的概念。本篇文章,我们来梳理一下在Android开发中我们面临的多线程开发中常见的应用场景和解决方案。随着技术的飞速发展,我们在处理多线程相关的业务场景时有了更多选择和更为简洁的解决方案。从早期的线程, Handler,到后来的 RxJava,再到现在的 Kotlin协程,每一代技术都在不断提升我们的开发效率和代码质量。及时更新项目的技术栈,采用新的库和框架,能够显著提高我们的开发效率,同时降低出错的成本。原创 2024-06-09 11:45:00 · 196 阅读 · 0 评论 -
了解并发内存模型(JMM)和 Volatile
上一篇:了解 JVM和JVM内存结构(JVM运行时数据区)上一篇博客我们对JVM有了一个简单的了解,同时也大概了解了java代码在栈中是怎么运行的。本篇博客我们来了解一下并发内存模型(Java内存模型)。JMMJava Memory Model:Java 内存模型首先说概念:JMM是一种规范,...原创 2021-08-14 21:09:29 · 379 阅读 · 0 评论 -
了解JVM中的GC
如何判断一个对象是否是垃圾:引用计数器法,根节点可达性分析法垃圾回收算法:标记清除法,复制清除法,标记压缩法。JVM的分代结构:新生代,老年代原创 2021-08-08 18:16:29 · 440 阅读 · 0 评论 -
了解 JVM和JVM内存结构(JVM运行时数据区)
了解JVM内存结构以及一段java代码到底是如何执行的。原创 2021-07-18 20:10:22 · 409 阅读 · 6 评论 -
Java 线程池使用详解
使用线程池主要有以下好处:线程复用,降低资源消耗 提高程序响应速度方便管理,可以控制最大并发数重点理解ThreadPoolExecutor 构造中的7个参数以及不同任务数量的执行效果。原创 2021-07-03 19:22:41 · 3555 阅读 · 3 评论 -
JUC中的常用辅助类(CountDownLatch、CyclicBarrier、Semaphore)
JUC中的线程同步辅助类:CountDownLatch:减法计数器,当执行countDown方法数量达到指定数量后,触发后续操作。CyclicBarrier:循环屏障,每当执行await方法的次数达到指定数量,就会执行一遍Runnable方法Semaphore:信号量技术器,用来限制并发线程的数量(限流)原创 2021-06-27 18:18:40 · 406 阅读 · 3 评论 -
JUC中的 StampedLock
StampedLock 是ReentrantReadWriteLock的升级版,支持乐观读锁,但他是**不可重入锁**,主要区别在于乐观读锁实际上**不上锁**,不会阻塞写锁,理论上在读操作的性能上也会比ReentrantReadWriteLock的readLock性能要好(省去了加锁解锁的过程)。原创 2021-06-26 17:51:57 · 251 阅读 · 1 评论 -
JUC中的读写锁(ReentrantReadWriteLock)
JUC中的读写锁(ReadWriteLock)ReentrantReadWriteLock是一种悲观锁,其中写锁同时只能被一个线程持有,读锁可以同时被多个线程持有,所以,读写锁在多线程读的场景下效率会更高。比较适合在读多写少的场景下使用。原创 2021-06-23 21:19:01 · 372 阅读 · 2 评论 -
JUC中的 ReentrantLock
上一篇:从Java线程到kotlin协程之java.util.concurrent.locks包中的接口和实现类ReentrantLock (重入锁)重入锁就是可以多次上锁,实现了Lock接口跟synchronized不同,synchronized是自动上锁,自动解锁的,而Lock接口的实现类是需要手动上锁,手动解锁。先看一下ReentrantLock中的方法,常用的其实就是对Lock接口实现的方法。我们先来简单用一用,还是之前买票的例子:lock()获取锁,如果锁被其他线程持有,则处于阻原创 2021-06-19 15:48:34 · 249 阅读 · 1 评论 -
java.util.concurrent.locks 包中的接口和实现类
synchronized关键字相比较与JUC中的Lock有一定的缺陷比如:synchronized 不支持公平性,锁一旦释放,任何线程都能去获得释放的锁,很有可能出现其中一个线程一直获取锁资源,其他线程一直获取不到锁资源。如果一个线程不能获取到 synchronized的锁,那原创 2021-06-18 21:54:50 · 360 阅读 · 1 评论 -
JUC以及并发,线程同步,线程安全的概念加深
JUCJUC:就是JDK给我们提供好的一个工具包,提供了很多用于处理并发的类和接口。包名是 java.util.concurrent .取前三个字母就是JUC我们先大致看一眼这个包里都有啥可以看到,JUC包中有很多类和接口,我们之前用的Callable,FutureTask以及用来简化线程休眠的TimeUnit都在这个包中。所以说,基本上,不管你是Android开发还是Java开发,只要涉及到多线程并发的知识,这个包的代码你是一定会用到的,所以java.util.concurrent这个包里的类和原创 2021-06-18 15:48:38 · 284 阅读 · 1 评论 -
JUC中的线程通信 Condition
JUC中的线程通信Lock锁Condition线程通信原创 2021-06-20 22:04:00 · 248 阅读 · 1 评论 -
线程间的通信 wait、notify
上一篇:从Java线程到kotlin协程之线程同步(synchronized关键字)waitwait跟sleep方法的作用一样,也是让线程休眠,但是针对的对象不同。sleep: sleep是Thread类中的静态方法,是直接作用于线程的,在哪个线程调sleep,哪个线程就休眠,而且可以随时调用。sleep方法执行期间不会释放锁,其他线程也必须要等待sleep执行完毕后才有机会进入同步代码中。wait: wait是Object类中的一个普通方法,通过对象调用。但是必须在持有该对象锁的同步代码中调原创 2021-06-15 16:17:58 · 1522 阅读 · 1 评论 -
线程同步之synchronized关键字
上一篇:从Java线程到kotlin协程之线程合并 (join)线程的同步简单来讲,当多个线程要对同一个内存地址进行操作时,同一时间只能有一个线程对该内存地址进行操作,其他线程不可以对该内存地址进行操作,此时,其他线程处于等待状态,这个就是线程同步。实现线程同步的方法有很多。线程同步主要是为了解决数据安全的问题。我们先来看个经典的卖票例子。举个例子,总共有30张票,分5个窗口同时售卖,不加同步的代码如下object Ticket { /*总共票数*/ var totalCou原创 2021-06-14 13:55:19 · 880 阅读 · 3 评论 -
线程合并 (join)
上一篇:从Java线程到kotlin协程之线程休眠 (sleep)线程合并(join)将指定的线程加入到当前线程,当前线程会处于 WAITING 状态,直到引用的线程死亡(出现异常或者执行完毕),然后当前线程再继续执行。先来看看join方法源码可以看到,join调用了另外一个重载的方法,我们再看看重载的那个方法。可以看到,join方法最终调用的是一个同步方法,接收一个毫秒值。我们来简单用一用:有以下代码 public static void main(String[] args原创 2021-06-13 14:47:33 · 982 阅读 · 1 评论 -
线程休眠 (sleep)
上一篇:从Java线程到kotlin协程之线程的状态上一篇在看线程状态的时候我们用到了线程的几个方法例如:sleep join 实际上,这些方法就是对线程的调度(scheduled)本篇文章,我们先来看看简单看看线程的调度:Sleep 线程休眠线程休眠...原创 2021-06-13 11:23:43 · 5335 阅读 · 1 评论 -
Java线程的六种状态
New:新创建的线程,还没有调start执行Runnable:处于待运行以及正在运行中的线程Blocked:阻塞状态,等待获取synchronized锁继续执行的线程Waiting:等待状态,比如调用了wait,join等方法的线程Timed Waiting:等待固定时长的线程,比如调用了wait(time),sleep(time),join(time)的线程Terminated:正常运行结束或出现异常的线程原创 2021-06-05 16:55:30 · 376 阅读 · 4 评论 -
线程的基本使用
了解完多线程的概念之后,我们先来看一下线程的基本使用。Java线程的使用方式Java中实现线程的方式有一下三种继承Thread类,在子类实现run方法 实现Runable接口 实现Callable接口我们先来简单看看Thread类Thread类实现了Runnable接口Runnable接口中只有一个run方法,实际上,线程的任务就是在run方法中执行的,也就是说我们实际开发过程中就是在run方法里写业务代码。下面我们来看下三种方式的基本使用方式一:...原创 2021-05-30 20:39:19 · 364 阅读 · 2 评论 -
多线程开发的基本概念
在Android开发中,我们常常会遇到多线程开发的需求。由于Android中的,我们不能在主线程处理耗时逻辑,否则会导致卡顿,甚至出现ANR(应用无响应)等异常情况。因此,我们需要将网络请求等耗时操作放到中去执行,完成后再更新UI。多线程开发因此成为Android开发中的一个重要部分。随着Android开发技术的不断进步,从早期的使用Handler,到后来的RxJava,再到如今的Kotlin协程,切换线程以及并发编程的代码写起来是越来越简洁了。原创 2021-05-29 17:22:56 · 658 阅读 · 1 评论