线程同步
同步辅助类
- CountDownLatch:
计数器,在A线程进行倒数计数(countDown),在B线程进行阻塞(await),知道countDown为0,B线程才可以启动执行下一步代码
Queue 队列
- 抛出异常 返回特殊值
- 插入 add(e) offer(e)
- 移除 remove() poll()
- 检查 element() peek()
- 队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外
ThreadLocal 线程同步
ThreadLocal对象,线程局部 (thread-local) 变量,它可以理解成一个超大的Map集合,只有当前某个线程给这个集合中保存的数据,那么在其他的地方
只有这个线程可以取出来,在保存数据的时候,使用的当前线程对象作为map集合的key存在。
public class ThreadLocalUtils {
private static final ThreadLocal<Connection> map = new ThreadLocal<Connection>();
//提交获取连接的方法
public static Connection getConnection( ){
return map.get();
}
//提交一个保存连接的方法
public static void setConnection( Connection conn ){
map.set(conn);
}
HandlerThread
- 持有一个已经创建相应的Looper的Thread类
- 暴露自身的Looper,提供外界Handler 一个Looper(getLooper:)用来new 出Handler无需关心Looper的创建与启动。
AsyncQueryHandler
- 异步处理ContentResolver的工作
- 本身是一个Handler,需要在主线程中new出来。
- 持有一个ContentResolver,对它增删查进行封装
- 构造方法中已经启动了一个HandlerThread,并创建一个依附在该线程上执行消息的mWorkerHandler。
- 成员变量:mWorkerHandler(继承了Handler),异步处理增删改查后,会发送处理完成消息给AsyncQueryHandler自己,这时自己就会调用onXxxxComplete()方法.
LruCache<K, V>
- 一个同步的缓存集合类,内部使用了LinkedHashMap<K, V> map,以键值对的形式来存储元素
- 具有增删改查的同步方法。
- trimToSize(int maxSize):过滤掉过时的缓存,保留最新的maxSize个缓存。
Volley 类中的BitmapLruCache extends LruCache<String, Bitmap>
- 一个以url,bitmap保存缓存的bitmap集合。