美文网首页
链表应用-回收池

链表应用-回收池

作者: 嘻嘻疯子 | 来源:发表于2019-04-15 11:49 被阅读0次
 private static final class TouchTarget {
        private static final int MAX_RECYCLED = 32;
        private static final Object sRecycleLock = new Object[0];
        private static TouchTarget sRecycleBin;
        private static int sRecycledCount;

        // The touched child view.
        public View child;

        // The combined bit mask of pointer ids for all pointers captured by the target.
        public int pointerIdBits;

        // The next target in the target list.
        public TouchTarget next;

        private TouchTarget() {
        }

        public static TouchTarget obtain(@NonNull View child, int pointerIdBits) {
            if (child == null) {
                throw new IllegalArgumentException("child must be non-null");
            }

            final TouchTarget target;
            synchronized (sRecycleLock) {
                if (sRecycleBin == null) {
                    target = new TouchTarget();
                } else {
                    target = sRecycleBin;
                    sRecycleBin = target.next;
                     sRecycledCount--;
                    target.next = null;
                }
            }
            target.child = child;
            target.pointerIdBits = pointerIdBits;
            return target;
        }

        public void recycle() {
            if (child == null) {
                throw new IllegalStateException("already recycled once");
            }

            synchronized (sRecycleLock) {
                if (sRecycledCount < MAX_RECYCLED) {
                    next = sRecycleBin;
                    sRecycleBin = this;
                    sRecycledCount += 1;
                } else {
                    next = null;
                }
                child = null;
            }
        }
    }

相关文章

  • 链表应用-回收池

  • win2003 iis6 iis假死

    缩短IIS应用池回收时间,减少IIS假死的解决方法 IIS日志: 应用程序:ISAPI ‘C:\WINDOWS\s...

  • 线程池

    JDK线程池 为什么要用线程池 线程池为什么这么设计 线程池原理 核心线程是否能被回收 如何回收空闲线程 Tomc...

  • Unity--简单的对象池

    简单的对象池分三步走: 建立对象池 拿到对象 回收对象 Test为对象池,Obj为自动回收的物体 Test.cs ...

  • js内存泄露总结

    什么是内存泄露 应用程序不再需要占用内存的时候,由于某些原因,内存没有被操作系统或者可用内存池回收。 javasc...

  • iOS AutoReleasePool 自动释放池以及RunLo

    AutoReleasePool 自动释放池 自动释放池 -> 内存自动回收机制 -> 变量release的时机延...

  • nginx 双向链表

    ngx_queue_t双向链表是Nginx提供的轻量级链表容器,它与Nginx的内存池无关,因此,这个链表将不会负...

  • 链表应用

    链表的应用:常用于播放器,边播放边下载的场景,播放和下载的内容是存储在不同的地址块,通过链表的 next 找到下一...

  • RecyclerView缓存回收源码分析

    序言 这篇文章会分析一下RecyclerView的回收机制 主要讲一下回收结构以及如何选择回收池 Recycler...

  • Android四种线程池

    1. newCachedThreadPool() 缓存线程池 如果线程池的规模超过了处理需求,将自动回收空闲线程,...

网友评论

      本文标题:链表应用-回收池

      本文链接:https://www.haomeiwen.com/subject/ahfuwqtx.html