线程安全处理笔记(一)

来源:互联网 发布:无锡大数据it 编辑:程序博客网 时间:2024/05/29 23:48

目前主流智能操作系统都引入了多线程的计算,这就带来了线程的安全问题,而线程安全问题多是由多线程对共享资源的访问引起的。

在线程的安全方面,Android采用的更多是java的实现,,除了Java的join()、wait()、sleep()、notify()等方法和synchrononized关键字外,还有Java的并发库。

除了synchrnoized关键字外,基于Java的多线程安全均比较复杂,对于不是十分复杂的场景,优先考虑使用AsyncTask进行多线程处理

synchronized同步:

在Android的应用层,多线程的并发很多是靠synchronized关键字实现的,这样的实现非常的简单,通过synchronized关键字,可以实现方法和语句块的同步,同步的本质是对特定的对加锁,他们可以使来自调用方法的对象,也可以是开发者设计的对象。

synchronized关键字并不能继承,对于父类的同步方法,在子类中也必须再次的显示的声明才能成为同步方法。

synchronized关键字的局限在于试图获得锁的时候无法设定超时和中断,每个锁只有一个条件,在某些场景下可能不够用,另外同步会带来很大的开销,甚至造成死锁,因此在开发时要避免无所谓的同步。

 

方法同步:一般方法同步(将synchronized关键字作用于对象应用object reference,作用域仅限类的单个对象)、静态的方法同步(本质是将类本身作为锁,其作用域是该类的所有对象)

语句块同步

 

 

SQLIte调用

对于SQLite的调用,可能会存在多处同时执行读和写的操作的场景,这种场景也要考虑线程的安全性,Android提供了AsyncQueryHandler方法来解决这一问题。将耗时的查询操作放置在非UI的主线程中,操作结束后,通过Handler调用相应的UI主线程的方法处理操作执行的结果。

0 0