01 2013 档案

摘要:如果你定义了一个单实例的java bean,它有若干属性,但是有一个属性不是线程安全的,比如说HashMap。并且碰巧你并不需要在不同的线程中共享这个属性,也就是说这个属性不存在跨线程的意义。那么你不要sychronize这么复杂的东西,ThreadLocal将是你不错的选择。 举例来说: import java.util.HashMap; public class TreadLocalT... 阅读全文
posted @ 2013-01-20 23:36 永远是学生 阅读(71012) 评论(3) 推荐(1) 编辑
摘要:在使用Lock之前,我们都使用Object 的wait和notify实现同步的。举例来说,一个producer和consumer,consumer发现没有东西了,等待,produer生成东西了,唤醒。 线程consumer 线程producer synchronize(obj){ obj.wait()... 阅读全文
posted @ 2013-01-20 13:54 永远是学生 阅读(15373) 评论(0) 推荐(4) 编辑
摘要:前段时间review同事的代码,发现可以简化成如下的模型:Thread 1Thread 2lock.lock(); condition.await(); lock.unlock()lock.lock(); condition.signal(); lock.unlock(); 怀疑是个死锁。写了下面这个case模拟了一下,却没有问题。但是T2为何能进入signal呢?根据javadoc的文档,这明显是第三种情况:public void lock()Acquires the lock.Acquires the lock if it ... 阅读全文
posted @ 2013-01-13 11:14 永远是学生 阅读(463) 评论(0) 推荐(0) 编辑
摘要:垃圾回收是JVM的后台线程完成的,回收内存中不再被引用的那些对象所占用的内存空间。垃圾回收机制在内存达到预先设定的阀值后被触发。经过几个版本的演化,目前主流的算法是CMS,即concurrent mark and sweeping,新一代GC算法G1(garbage first)也在Java6中实现。本文将介绍这几种垃圾回收算法,理解了这些算法,可以帮助我们写出高性能的java程序,并能诊断一些s... 阅读全文
posted @ 2013-01-12 22:42 永远是学生 阅读(2079) 评论(0) 推荐(0) 编辑