09 2012 档案

摘要:最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demojdk动态代理实现:View Code import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class DynamicProxy implements InvocationHandler { private Target target; public DynamicPr... 阅读全文
posted @ 2012-09-29 10:04 softwa 阅读(287) 评论(0) 推荐(0)
摘要:在自实现1中写了0.1版本,基本上只是完成了线程池需要的三个基本要素,任务队列,工作线程,线程池管理器今天在上一个版本的基础上改了下:姑且算作1.0版,基本上能跑通测试,接下来还需要进一步优化,调整他们之间的关系这里画个简单的图:Task:需要完成的任务,一般是一个接口,我们的任务区实现该接口线程管理器:用于创建,销毁线程,主要管理一个任务队列TaskThread:用于真正去执行任务的线程下面是他们的代码:Task:View Code public class Task { //索引为了测试打印用 private int index; public Task(int inde... 阅读全文
posted @ 2012-09-26 16:19 softwa 阅读(159) 评论(0) 推荐(0)
摘要:在写线程池代码的时候,最初始报IllegalMonitorStateException异常,检查发现 在没有进行同步的对象上调用notify,wait操作,所以报该异常api中解释:public class IllegalMonitorStateExceptionextends RuntimeException抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。 从以下版本开始: JDK1.0 另请参见:Object.notify(), Object.notifyAll(), Object.wait(), Object.wait(lo 阅读全文
posted @ 2012-09-26 15:44 softwa 阅读(321) 评论(0) 推荐(0)
摘要:一直想好好的研究研java有关线程,并发包的东西,一直也没去做,最近因为工作中用到了,正好趁此机会好好的学习下。看着并发包实现的线程池,功能也确实挺多的,总觉得理解的不够透彻,感觉总是别人的东西,所以决定自己从最简单的开始写,慢慢的优化,然后慢慢的对比他的源代码,这样应该能比较深入的理解。今天开始写了个最简单的原始版本,姑且算作0.1版本,里面没有用到锁等机制。一共分为三部分:1、任务类(Task)View Code public class Task { public void doTask() { System.out.println("do the task"); . 阅读全文
posted @ 2012-09-24 21:20 softwa 阅读(129) 评论(0) 推荐(0)
摘要:之前看过一部分jdk的源码,发现看了之后又忘了,或者是看的不够深入,有次去面试:问我hashmap怎么实现的,结果我答的不怎么样,没答出一些关键部分,现在再重新开读读jdk的util包下的一些源代码:特别声明:小弟发博客纯属学习,若有错误,不当之处请指出!!!首先,我们大家都知道hashmap内部用的是散列实现,但是具体怎么实现的呢?如果解决冲突的呢?实现原理:hashmap用数组实现,数组中存放的是Entry类型的元素,每个Entry元素其实是一个key-value对,持有下一个元素的引用,这就说明table数组中的Entry元素还是某个Entry链表的首节点,指向该链表的下一个元素,所以h 阅读全文
posted @ 2012-09-13 22:17 softwa 阅读(594) 评论(0) 推荐(0)
摘要:一、equals方法的作用1、默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。2 、要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。没有覆盖equals方法代码如下://学生类 public class Student { private int age; private String name; public... 阅读全文
posted @ 2012-09-13 15:08 softwa 阅读(243) 评论(0) 推荐(0)
摘要:Select …forupdate语句是我们经常使用手工加锁语句。通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作。同时,在多版本一致读机制的支持下,select语句也不会被其他类型语句所阻碍。但是有时我们的确需要再查询的时候不让其他语句操作,就需要用到这样的语句了。这篇文章中有详细解释:http://www.cnblogs.com/sunwei2012/archive/2010/12/13/1904390.html 阅读全文
posted @ 2012-09-13 14:11 softwa 阅读(138) 评论(0) 推荐(0)
摘要:Future表示一个任务的生命周期,并提供相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务cancel(boolean mayInterruptIfRunning) 试图取消对此任务的执行。get() 如有必要,等待计算完成,然后获取其结果。get(long timeout, TimeUnit unit) 如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。isCancelled() 如果在任务正常完成前将其取消,则返回 true。isDone() 如果... 阅读全文
posted @ 2012-09-11 19:11 softwa 阅读(142) 评论(0) 推荐(0)
摘要:CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。await(long timeout, TimeUnit unit) 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。countDown() 递减锁存器的计数,如果计数到达零,则释放所有等待线程代码示例如下:(http://wingware.iteye.com/blog/1542725)View Code 1 private static final int THREADS = 100; ... 阅读全文
posted @ 2012-09-11 18:06 softwa 阅读(137) 评论(0) 推荐(0)