线程同步

同步辅助类

  • CountDownLatch:
    计数器,在A线程进行倒数计数(countDown),在B线程进行阻塞(await),知道countDown为0,B线程才可以启动执行下一步代码

Queue 队列

  • 抛出异常 返回特殊值
    1. 插入 add(e) offer(e)
    2. 移除 remove() poll()
    3. 检查 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集合。
posted @ 2015-10-30 08:34  beyondbycyx  阅读(176)  评论(0编辑  收藏  举报