摘要: package cn.sunzn.memoryleak;import java.util.Collection;import java.util.Collections;import java.util.HashSet;/*** HashSet 的底层是由 HashMap 实现的,HashSet 存储的值会被当作 HashMap 中的 Key 来存储同时* 这个 Key 会和一个固定的充当 Value 的值共同组成一个 Entry,这个 Entry 会调用 hashCode()方法* 计算出一个 hashCode 值作为这个 Entry 的属性。当存入下一个值的时候 HashSet 内部会计算 阅读全文
posted @ 2013-02-13 20:08 sunzn 阅读(3302) 评论(0) 推荐(0) 编辑
摘要: 在进行程序锁开发的时候,我们会发现程序锁实现的核心难点是如何监视应用程序的启动,于是我们主要着手实现如何对应用程序的启动进行监测,这个功能的实现经历了三种方案的尝试,也符合我们实际开发中的思路,具体的实现过程如下:尝试方案一设想每个应用在启动的时候会发送一个广播,那么我们就能通过广播接收者来订阅这个广播从而达到监视应用程序启动的目的,于是我们在广播接收者的动作名称中去寻找这样的广播动作,但是很可惜系统并没有为我们提供这样一种广播。尝试方案二设想系统自身是否有一个服务对应用程序的启动做监视,如果这个服务里面的一个方法能够得到前台应用任务栈最顶端的 Activity,那么我们也能够达到监视应用程序 阅读全文
posted @ 2013-02-13 19:59 sunzn 阅读(13225) 评论(3) 推荐(2) 编辑
摘要: 常驻型广播常驻型广播,当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到,它的注册方式就是在你应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册。这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的。示例代码如下: 非常驻型广播非常驻型广播,当应用程序结束了,广播自然就没有了,比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。这样你的广播接收者就一个非常驻型的了,这种注册方式也叫动态注册。这种方式可以理解为通过代码注册的... 阅读全文
posted @ 2013-02-13 19:49 sunzn 阅读(38572) 评论(4) 推荐(4) 编辑
摘要: 算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1。代码如下:package cn.sunzn.dichotomy;public class DichotomySearch { 阅读全文
posted @ 2013-02-13 19:42 sunzn 阅读(44385) 评论(3) 推荐(5) 编辑
摘要: 为了便于理解先来看看没有加同步代码块的 2 组同样功能的代码在不同状态下的执行结果,下面看第一组:package cn.sunzn.synchronize;public class SynchronizeCode { public static void main(String[] args) { new Thread() { public void run() { while (true) { System.out.println("同步代码"); } ... 阅读全文
posted @ 2013-02-13 19:37 sunzn 阅读(13914) 评论(0) 推荐(1) 编辑
摘要: 同步代码块比较经典的例子是火车站的售票员售票的过程,下面通过代码来分析同步代码块在这里面的作用。package cn.sunzn.synchronize;public class SynchronizeCode { public static void main(String[] args) { new TicketSeller().start(); new TicketSeller().start(); new TicketSeller().start(); new TicketSeller().start(); }}class Tic... 阅读全文
posted @ 2013-02-13 19:29 sunzn 阅读(5032) 评论(0) 推荐(0) 编辑
摘要: 并发线程之间的死锁通常发生在同步代码块的相互嵌套使用的过程中,下面先来看段代码:package cn.sunzn.synchronize;public class DeadLock { public static void main(String[] args) { final Object lock1 = new Object(); final Object lock2 = new Object(); /** 线程 0 **/ new Thread() { public void run() { ... 阅读全文
posted @ 2013-02-13 19:23 sunzn 阅读(1583) 评论(0) 推荐(0) 编辑
摘要: 实际编程中如果我们要使用系统中未暴露的方法,我们可以通过反射来使用这些方法,但在使用过程中我们很难确定方法对用的参数类型,以下的代码可以帮你得到这些信息:package cn.sunzn.reflectcase;import java.lang.reflect.Method;public class GetMethod { public static void main(String[] args) { getMethodInfo("java.util.HashSet"); } /** * 传入全类名获得对应类中所有方法名和参数名 */ @Suppres... 阅读全文
posted @ 2013-02-13 19:17 sunzn 阅读(52223) 评论(3) 推荐(0) 编辑