摘要: 转自:http://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/index.html?ca=drs-简介ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型。同时,ConcurrentHashMap 的源代码会涉及到散列算法和链表数据结构,所以 阅读全文
posted @ 2013-01-06 17:00 OYK 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 包 java.util.concurrent.*[ 一 ]、常用线程池最常用构造方法为:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactorythreadFactory, RejectedExecutionHandler handler)JDK自带的配置好的线程池: // 固定工作线程数量的线程池 ExecutorService executorServ.. 阅读全文
posted @ 2012-12-29 15:28 OYK 阅读(796) 评论(0) 推荐(0) 编辑
摘要: 在编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片的效果,有时候还要对图片进行变换,以拉伸,扭曲等等。这些效果在android中有很好的支持,通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的所说的效果。下面将分别介绍这两个矩阵的用法和相关的函数。颜色矩阵android中可以通过颜色矩阵(ColorMatrix类)方面的操作颜色,颜色矩阵是一个5x4 的矩阵(如图1.1)可以用来方面的修改图片中RGBA各分量的值,颜色矩阵以一维数组的方式存储如下:[ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o 阅读全文
posted @ 2012-12-08 16:42 OYK 阅读(635) 评论(0) 推荐(0) 编辑
摘要: 1FIFO1.1.原理按照“先进先出(FirstIn,FirstOut)”的原理淘汰数据。1.2.实现FIFO队列,具体实现如下:1.新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动;2.淘汰FIFO队列头部的数据;1.3.分析l命中率命中率很低,因为命中率太低,实际应用中基本上不会采用。l复杂度简单l代价实现代价很小。2.SecondChance2.1.原理FIFO算法的改进版,其思想是“如果被淘汰的数据之前被访问过,则给其第二次机会(SecondChance)”。2.2.实现每个数据会增加一个访问标志位,用于标识此数据放入缓存队列后是否被再次访问过。如上图,A是FIFO队列中 阅读全文
posted @ 2012-12-05 15:59 OYK 阅读(1983) 评论(0) 推荐(0) 编辑
摘要: 1.LFU类1.1.LFU1.1.1.原理LFU(LeastFrequentlyUsed)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。1.1.2.实现LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。具体实现如下:1.新加入数据插入到队列尾部(因为引用计数为1);2.队列中的数据被访问后,引用计数增加,队列重新排序;3.当需要淘汰数据时,将已经排序的列表最后的数据块删除。1.1.3.分析l命中率一般情况下,LFU效率要优于LRU,且能够避免周期性或者偶发性的操作导致缓存命中率下降 阅读全文
posted @ 2012-12-05 15:58 OYK 阅读(2413) 评论(0) 推荐(1) 编辑
摘要: 1.LRU1.1.原理LRU(Leastrecentlyused,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2.实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1.新数据插入到链表头部;2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3.当链表满的时候,将链表尾部的数据丢弃。1.3.分析【命中率】当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。【复杂度】实现简单。【代价】命中时需要遍历链表,找到命中的数据块索引,然后需要 阅读全文
posted @ 2012-12-05 15:53 OYK 阅读(19249) 评论(5) 推荐(7) 编辑
摘要: 在Android中实用LRU+软引用(弱引用)的方法来缓存图片,可以减少内存溢出的情况。实现思路:在把图片保存到LRU集合中的时候,同时保存在一个弱引用的集合之中,如果此元素被LRU算法删除,可能垃圾回收器还并没有回收,可以通过弱引用的集合获取到此引用。publicLinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder);initialCapacity 初始容量loadFactor 加载因子,一般是 0.75faccessOrder false 基于插入顺序 true 基于访问顺序(get一个元素后,这个 阅读全文
posted @ 2012-12-04 18:23 OYK 阅读(2243) 评论(0) 推荐(0) 编辑
摘要: bundle字段这些字段名都是XML中的名称,在xcode的属性编辑器中,名字并不相同bundle目录中的属性列表详细描述了有关该bundle的信息。Finder和一些系统API在一些情况下会使用这些信息。bundle支持下列字段类型:Core Foundation字段–描述了bundle的综合属性Cocoa特定的字段–描述了和Cocoa有关的bundle的属性Finder特定的字段–描述了和Finder与文件系统有关的信息启动服务字段–描述了和启动服务有关的信息标准Bundle字段Mac OS X 为描述bundle的信息提供了一组核心字段。集成开发环境会赋予这些字段缺省值。表A-1列出了这 阅读全文
posted @ 2012-12-04 16:09 OYK 阅读(438) 评论(0) 推荐(0) 编辑
摘要: Afinal 是一个android的 orm 和 ioc 框架。而且封装了android中的httpClient,使其更加简单易用。使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。目前Afinal主要有四大模块:1、FinalDB模块:android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。2、FinalActivity模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findV 阅读全文
posted @ 2012-12-04 15:53 OYK 阅读(1369) 评论(0) 推荐(0) 编辑
摘要: Run LoopsRun loops是线程相关的的基础框架的一部分。一个run loop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。Run loop的管理并不完全自动的。你仍然需要设计你的线程代码在合适的时候启动run loop并正确响应输入事件。Cocoa和Core Fundation都提供了run loop objects来帮助配置和管理你线程的run loop。你的应用程序不需要显式的创建这些对象(run loop objects);每个线程,包括程序的主线程都有与之对应的run l 阅读全文
posted @ 2012-12-04 15:16 OYK 阅读(739) 评论(0) 推荐(0) 编辑