
Java
zzhonghe2
这个作者很懒,什么都没留下…
展开
-
采用泛型,自己实现一个Stack
实现思路:1.建立一个结点,每个结点都有一个保存自身value的属性,以及一个指向下一个结点的ref.2.当前Stack指向一个结点3.put方法,每次都新创建这样的一个结点,把值放进去,然后把指向下一个结点的ref,用来指向当前的stack所指向的那个结点4.pop方法,返回当前stack指向的那个结点的value. 并把当前结点所引用的下一个结点,作为当前结点。...原创 2010-12-12 12:26:49 · 172 阅读 · 0 评论 -
finally关键字与return关键字的关系
finally关键字与return关键字的关系1. finally的内容,会在真正的return之前,进行调用,如果finally里面改变了函数执行的流程,那么之前那个return就不再执行了。[code="java"] public static int testFinally(){ int i=0; try{ ...2011-03-15 17:26:55 · 125 阅读 · 0 评论 -
Oracle ADF 学习笔记 -- Entity Object
通过这个把月的接触,我觉得自己已经非常喜欢ADF这个框架了。 简单地说,ADF分UI层和BC层, 并有Jdev提供了完美的支持,可以极大提高软件的开发效率,今年的目标就是好好研究下ADF。说到UI,我之前觉得Ext的UI已经非常不错了,不仅美观,同时还提供了非常完善的用户体验,简单地几行代码就能做出令人赞叹的界面。 ADF的UI,美观以及体验绝对不会输给Ext,同时有Jdev的支持, 采用...原创 2011-10-07 23:57:09 · 355 阅读 · 0 评论 -
关于类的equals和hashcode方法
当我们想要改写equals方法的时候,总是应该打起12分的精神,不然稍不留神,就能跑出来一些让你抓狂的错误。先看个例子:[code="java"]package general;import static java.lang.System.out;import java.util.HashMap;import java.util.HashSet;im...2010-12-06 22:21:21 · 88 阅读 · 0 评论 -
获取字符组所有排列字符串的算法
刚看了论坛上有个很有意思的递归算法题,忍不住自己也动手来写写看。比如给定一个字符串 “123”, 求出用1,2,3能排列出来的所有组合。[code="java"] /** * 1.对于每个需要需要获取排列集合的字符串,先获取最左边第一个字符c,然后获取右边字符串所有排列的集合 * 2.然后对每一个排列集合中的字符串,进行c的插入,从左到右,一共可以插入(长度...原创 2010-12-04 09:43:32 · 130 阅读 · 0 评论 -
并发编程 出纳-顾客模型 仿真练习
这个仿真模型包括如下几个对象:顾客: 随机的时间间隔出现顾客,每个顾客办理业务的时间也是随机。顾客会排队办理业务。出纳: 每次选取排在最前面的顾客进行服务,服务时间由顾客的业务时间而定。出纳经理: 每隔一段时间,查看顾客排队的人数,排队的人多就增加出纳窗口,排队人少的话,就减少出纳窗口,让出纳休息。通过调整这个模型的参数: 1.顾客出现的时间间隔2...原创 2010-11-29 22:09:37 · 139 阅读 · 0 评论 -
Semaphore--给队列加上许可证
在如下的场景,我们可能需要加入类似许可证的实现:有一个资源队列,不管在什么情况下,都只允许指定数目的资源被使用,资源被使用,并归还之后,新的任务才能使用这些资源。[code="java"]public class TestSemaphore { static int count=0; Random r=new Random(47); BlockingQueue qu...原创 2010-11-28 16:12:09 · 114 阅读 · 0 评论 -
shutdown和shutdownNow--多线程任务的关闭
采用5.0的线程池关闭线程,不管怎样,最后都是调用Interrupt.而interrupt这个方法,并不是什么情况下都能结束线程,释放资源。Interrupt只是在线程阻塞的时候,抛个异常出来,从而结束这个阻塞。比如像下面的这种代码,就不管怎么shutdown,或者是shutdownNow,都不会关闭:[code="java"]while(true){ try { ...原创 2010-11-28 14:22:38 · 287 阅读 · 0 评论 -
PriorityBlockingQueue优先级规则
PriorityBlockingQueue里面存储的对象必须是实现Comparable接口。队列通过这个接口的compare方法确定对象的priority。 规则是:当前和其他对象比较,如果compare方法返回负数,那么在队列里面的优先级就比较搞。下面的测试可以说明这个断言:查看打印结果,比较take出来的Entity和left的entity,比较他们的priority...原创 2010-11-28 10:17:25 · 603 阅读 · 0 评论 -
ThreadPoolExecutor线程池实现逻辑
之前不知道是看了哪篇文章,形成了一个概念,说ThreadPoolExecutor的线程超时回收机制,是采用的DeplyQueue,我觉得非常惊讶,DeplyQueue虽然说是超时的能够取出回收,但是那些没有超时的对象,是怎么也取不出来的啊,带着这个问题,我详细阅读了一下这部分的源代码,发现其实现和DelayQueue一点关系也没有,也算是解决了我的一个疑问。该线程池的实现,主要有两个容器,...原创 2010-11-27 23:08:22 · 103 阅读 · 0 评论 -
各种同步方法性能比较(synchronized,ReentrantLock,Atomic)
5.0的多线程任务包对于同步的性能方面有了很大的改进,在原有synchronized关键字的基础上,又增加了ReentrantLock,以及各种Atomic类。了解其性能的优劣程度,有助与我们在特定的情形下做出正确的选择。总体的结论先摆出来: synchronized: 在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序...原创 2010-11-27 10:27:24 · 519 阅读 · 0 评论 -
阻塞任务队列DelayQueue
DelayQueue也和其他阻塞队列一样,采用put和take进行存储。但有意思的是,这个队列里面所存储的对象都带有一个时间参数,采用take获取数据的时候,如果时间没有到,取不出来任何数据。而加入数据的时候,是不会阻塞的。一般用在清理超时对象的场景:比如,有一批对象,用完后存入(offer)这个队列,并设定60秒delay(超时), 然后有个线程在外面拼命的take,如果有任...原创 2010-11-24 22:14:20 · 156 阅读 · 0 评论 -
多线程任务协作:CountDownLatch的使用
多线程任务协作中,如果有一个任务,需要在其他线程的任务完成以后才能执行的情况下,CountDownLatch就派上用场,它能使用很少的代码,省掉一堆wait和notify,帮你很放心的完成这种协作。使用步骤:1. 首先所有协作线程都引用同一个CountDownLatch2. CountDownLatch初始化传入一个计数器3. 最后执行的那个任务,需要调用CountDown...原创 2010-11-24 18:50:56 · 162 阅读 · 0 评论 -
JDK5提供的阻塞队列
JDK5的concurrent包里面尽是宝贝,还好我有的是时间,正好可以一一八来。以前用多线程处理 生产者-消费者 问题的时候,需要采用wait,notify, 现在有了这些阻塞队列,就可以把这些wait,notify抛一边,轻易的就能解决问题。首先是SynchronousQueue,这个队列里面只能放一个对象,在没有被take之前,所有的add都会被阻塞,反之,如果队列里面没有对...原创 2010-11-24 18:19:39 · 121 阅读 · 0 评论 -
线程外捕获某个线程内异常的方法
由于线程本质的特性,我们并不能直接捕获从线程中逃逸的异常,一旦异常逃逸出run方法,那它就直接上控制台了。[code="java"] /* * 1.Thread的异常在Thread外面是捕获不到的 */ public static void testThreadException(){ ExecutorService se=Exec...原创 2010-11-20 16:24:43 · 323 阅读 · 0 评论 -
Java并发整理笔记
前面对并发编程,我一直是心怀崇敬,如履薄冰。尽管如此,稍微复杂一点的并发任务,就搞的焦头烂额。现整理一些学习笔记,以便随时记录,随时巩固。 [code="java"] //该线程池是个可以回收利用的线程池,按需产生线程,可以被复用,线程可以闲置60秒,或者被销毁 //一般多线程程序,首选该线程池 public static void testCach...原创 2010-11-20 15:21:43 · 148 阅读 · 0 评论 -
原来5.0就已经优化好了字符串的连接符号
5.0里面, 字符连接用+号,速度已经可以和StringBuffer媲美了,其唯一的限制就是采用+号连接的时候,不能跨循环。看来编译过程中做了很多优化的工作啊, 本来我还一直以为到6.0以后才有这个优化的,没想到5.0就有了。 public static void addString(){ String b=""; long start=Sys...原创 2010-11-11 12:24:56 · 98 阅读 · 0 评论 -
Java垃圾回收
之前总是觉得掌握了Java的垃圾回收机制,但稍微讨论下,就发现自己了解的不够全面,现在重新整理一下,感觉还是不错:关于finalizer():用于清理非正常开启的内存,一般情况下,只有你用native code时候,打开了内存区域,然后在finalizer方法里面进行关闭清理,但一般都不推荐这么做。打开了内存,不用就自己写方法关闭, finalize只用来检测bug,非正常的关...原创 2010-11-11 12:20:10 · 131 阅读 · 0 评论 -
提高Fusion开发效率的几个技巧
1. 整理自己的所做过的Bug List, 用Excel列出来, 比如需要多线作战的话,记录每个Bug的作用,轨迹,方便维护。2. 如果需要输入很多Column的字段,可以通过Google翻译来快速检查,是否有Type Error. 能够翻译的一般没有错误。3. 从R12 Update代码时,需要请相关的专业人士进行Review,以免Miss掉很多东西。4. Premerg...原创 2012-05-29 12:29:55 · 225 阅读 · 0 评论