牛骨文教育服务平台(让学习变的简单)
博文笔记

Android中线程同步异步方式小结

创建时间:2018-02-13 投稿人: 浏览次数:125

一、同步和异步的区别

    首先以一个常见的开发场景来区别一下同步和异步的区别,比如我们要获取一张网络图片并完成显示。在这个场景中我们需要开启两个线程,一个是子线程即下载图片的线程;另外是主 UI 线程即图片下载完成后进行显示的线程。针对这个场景分别用两幅实现的流程图来区分同步和异步。

从图中可以看到,二者的区别在于:同步时当前主线程会阻塞,直到子线程通知主线程为止(先不考虑ANR而异步的时候主线程可以继续干其它的事情,当子线程完成任务的时候通知一下主线程就可以了,类似于接口回调或消息队列的思想。所以很关键的一点,在于它们是否会阻塞。

二、Android 中同步的实现方式

synchronizedwait/notify

      Java同步机制简介

      JAVAsynchronized关键字能够作为函数的修饰符也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。

  

卖火车票的案例:同一个资源需要被多个操作线程共享时,用同步。

Synchronized(这里放的就是共享的资源对象)

第一种:同步代码块:

 

第二种:同步方法

 


 

  A无论synchronized关键字加在方法上还是对象上,他锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。 
      B.每个对象只有一个锁和之相关联 
      C.实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

三、Android 中异步的实现方式

Handler

接口回调

EventBus 等事件分发

 

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。