Android应用中,对于很多类似XXXManager的业务逻辑类,很多都用单例模式。好处很多,比如保持数据的原子性和一致性。同时,往往存在主线程和各种工作线程,需要保证单例中的很多业务逻辑达到线程安全。对于单例,实现线程安全的最简单方法就是在method前面加个synchronized了事。但这样做其实是有隐患的,尤其是多人开发同一个XXXManager的时候。
Public synchronized void doSomeThing() {}
在Java中,这样的一个定义相当于
Public void doSomeThing() {synchronized(this) {}}
即对象作为锁,所有调用这个对象的方法的线程将共同争夺这个锁,又因为是单例,所以实际上同一个虚拟机下(即同一个Android应用进程),所有的线程都共同争夺这个锁。这样实际上
Public synchronized void doSomeThing(){}