Android应用开发之Java基础篇——数据同步
2010-10-14 06:17:00 来源:本站整理核心提示:线程之间协作这个世界“没有永远的朋友,只有永远的利益”,Android应用开发之Java基础篇——数据同步(3),线程之间不光有竞争,某些情况下,但是软件技术没有“银弹”,多线程编程的复杂性也需要高度重视,也需要协作,举例如下假如有两个线程A
线程之间协作
这个世界“没有永远的朋友,只有永远的利益”。线程之间不光有竞争,某些情况下,也需要协作。举例如下假如有两个线程A,B,A线程负责从消息队列里面取出消息,并处理;B线程负责将消息放入消息队列。
A线程首先获得消息队列的锁,然后加锁,发现里面已经消息空了。怎么办呢?答案是阻塞当前线程,并释放消息队列的锁。B线程获得消息队列的锁,并把消息放入队列,通知A线程继续运行。
Java的基类Object提供了wait和notify方法(包括notifyAll)来实现上面所说的这种情形。另外有一点需要注意调用 wait,notify方法的时候,请确保你已经获得对象锁,否则将会抛出异常。另外使用这个wait和notify方法一定要小心,非常容易出错,因为线程协作本来就是一个非常复杂的问题。Android中也有使用wait和notify不当的地方,请参考我的博文《Android2.1源码中的一个bug》。本文就不展开讨论这两个方法了,请大家查看手册来学习使用。
总结
在任何系统中多线程编程都是一个比较复杂的部分。虽然Java进行了一些简化,但是软件技术没有“银弹”,多线程编程的复杂性也需要高度重视,负责经常容易中招。
更多精彩
赞助商链接