摘要: 可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁。 下面是使用实例: 两个例子最后的结果都是正确的,即 同一个线程id被连续输出两次。 结果如下: Th 阅读全文
posted @ 2017-06-09 21:47 邱进宝 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 引用一篇别人的博客,理解理解 http://vipcowrie.iteye.com/blog/1517338 阅读全文
posted @ 2017-06-09 21:31 邱进宝 阅读(132) 评论(0) 推荐(0) 编辑
摘要: Tomcat其实就是一个servlet的容器,因此,它在运行过程中,首先要做以下事情: 1、实现servlet api规范。如request、response、cookie、session等,容器对其要有一套完整的实现。 2、启动Socket监听端口,等待http请求。 3、获取http请求,分发请 阅读全文
posted @ 2017-06-05 11:50 邱进宝 阅读(876) 评论(0) 推荐(0) 编辑
摘要: JVM中的垃圾收集算法实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,这里介绍几种垃圾收集算法的思想。 1、标记-清除算法 这是最基础的垃圾收集算法,分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象。它的不足之处有两个:1、效 阅读全文
posted @ 2017-06-02 15:19 邱进宝 阅读(227) 评论(0) 推荐(0) 编辑
摘要: GC的问题,主要分为:1、哪些内存需要回收?2、什么时候回收?3、如何回收?这里主要讲第一个问题。 1、哪些内存需要回收? 垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”,哪些已经“死去”(即不可能再被任何途径使用的对象)。 (1)引用计数算法:给对象中添加一个引用计数器 阅读全文
posted @ 2017-06-02 12:11 邱进宝 阅读(1505) 评论(0) 推荐(0) 编辑
摘要: 从java开发人员的角度来看,类加载器可以分为3种: 1、启动类加载器(Bootstrap ClassLoader),负责将存放在<JAVA_HOME>\lib目录中,或者被-Xbootclasspath参数所指定的路径中,并且是虚拟机识别的类库加载到虚拟机内存中。 2、扩展类加载器(Extensi 阅读全文
posted @ 2017-06-02 10:56 邱进宝 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 线程不安全的HashMap 因为多线程环境下,使用HashMap进行put操作会引起死循环(死锁),导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下Ha 阅读全文
posted @ 2017-05-25 16:25 邱进宝 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 网上学习了一番BeanCopier类。 cglib是一款比较底层的操作java字节码的框架。 下面通过拷贝bean对象来测试BeanCopier的特性: 1. 属性名称、类型都相同: 结论:拷贝OK。 2. 属性名称相同、类型不同: 结论:名称相同而类型不同的属性不会被拷贝。 注意:即使源类型是原始 阅读全文
posted @ 2017-05-15 14:49 邱进宝 阅读(2572) 评论(0) 推荐(0) 编辑
摘要: Quartz运行基本: (1) 创建任务jobDetail(放入具体的jobImpl),触发器trigger(保存job的触发策略),均放入调度器scheduler。 (2) 执行scheduler.start()。 (3) 对于quartz.properties,要求较高的场景需要自定义配置,比如 阅读全文
posted @ 2017-05-11 20:02 邱进宝 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。 典型的冲突有: l 丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。 l 脏读:当一个事务读取其它完成一半 阅读全文
posted @ 2017-05-11 12:11 邱进宝 阅读(152) 评论(0) 推荐(0) 编辑