线程同步

同步辅助类

  • 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

  • 一个同步的缓存集合类,内部使用了LinkedHashMap map,以键值对的形式来存储元素
  • 具有增删改查的同步方法。
  • trimToSize(int maxSize):过滤掉过时的缓存,保留最新的maxSize个缓存。

Volley 类中的BitmapLruCache extends LruCache

  • 一个以url,bitmap保存缓存的bitmap集合。

你可能感兴趣的:(线程同步)