Android中线程同步异步方式小结
一、同步和异步的区别
首先以一个常见的开发场景来区别一下同步和异步的区别,比如我们要获取一张网络图片并完成显示。在这个场景中我们需要开启两个线程,一个是子线程—即下载图片的线程;另外是主 UI 线程—即图片下载完成后进行显示的线程。针对这个场景分别用两幅实现的流程图来区分同步和异步。
从图中可以看到,二者的区别在于:同步时当前主线程会阻塞,直到子线程通知主线程为止(先不考虑ANR);而异步的时候主线程可以继续干其它的事情,当子线程完成任务的时候通知一下主线程就可以了,类似于接口回调或消息队列的思想。所以很关键的一点,在于它们是否会阻塞。
二、Android 中同步的实现方式
synchronized、wait/notify
Java同步机制简介
JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。
卖火车票的案例:同一个资源需要被多个操作线程共享时,用同步。
Synchronized(这里放的就是共享的资源对象)
第一种:同步代码块:
第二种:同步方法
A.无论synchronized关键字加在方法上还是对象上,他锁的都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
B.每个对象只有一个锁和之相关联。
C.实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
三、Android 中异步的实现方式
Handler
接口回调
EventBus 等事件分发
- 上一篇: Android 同步和消息机制
- 下一篇: 在Android中实现多线程同步