TryLock

《Java并发编程实战》这本书的缺点是有些例子给的不完整,所以想直接复制代码、运行看结果还是比较费力的,第13章显示锁的一个例子就是这样。在这种情况下,只能自己写或求助于互联网。下面用网上的一个小例子演示带有超时功能的tryLock的基本用法。关于Lock和同步代码块的区别以及更深入的研究,后续博文会有所涉及。

CountDownLatch and CyclicBarrier

CountDownLatch和CyclicBarrier从字面上理解是“向下数的门闩”和“循环的障碍”,觉得怪怪的,但是即便翻译成更加书面语的“闭锁”或“栅栏”也并不容易理解。《Java并发编程实战》中详细讲解了两者的作用,也举了例子,但理解起来印象不深。如果只是从异同的角度去比较两者,网上倒是有不少文章,但是对于编程实践往往不如通俗的例子来得实在。

ThreadLocal

当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术被称为线程封闭,它是实现线程安全性的最简单方式之一。……在Swing中大量使用了线程封闭技术。……线程封闭技术的另一种常见应用是JDBC的Connection对象。

Java语言及其核心库提供了一些机制来帮助维持线程封闭性,例如局部变量和ThreadLocal类,但即便如此,程序员仍然需要负责确保封闭在线程中的对象不会从线程中逸出。

Future

之前在看《Java程序员修炼之道》(主要讲的是Java 7的新特性)的时候就看过并发这块儿,但是感觉看完过段儿时间印象也有点儿模糊。最近重温Java并发编程,拿起了《Java并发编程实战》,只能用四个字儿来形容:干货太多。书里讲的几乎没有废话,大部分例子也都不错,对于理解新的Java并发编程模型很有帮助。不过,也有些例子可能受篇幅所限,讲解的不够细致,所以我就需要从网上再找些相对丰富的例子补充上以加深理解。Future就是其中一例。

Hibernate Object States

Hibernate是一种对象/关系映射的持久化框架,它做的主要工作之一就是对象和数据库表记录之间的状态管理。Hibernate编程环境中操作的对象指的是Entity POJO对象,它存在四种状态:Transient, Persistent, Detached和Removed。下面是从网上摘录的一幅图(源自Java Persistence with Hibernate这本书),非常好地说明了这几种状态之间的转换关系。

A tip for Ubuntu 14.04 update

安装了Ubuntu 14.04之后,出现一个小问题,软件自动更新时经常提示空间不足。搜一下,下面的链接提供了一些解决方案。
http://askubuntu.com/questions/2793/how-do-i-remove-or-hide-old-kernel-versions-to-clean-up-the-boot-menu

简单说想快速解决就是一条命令:
sudo apt-get remove --purge $(dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d')

这条命令会移除所有除了当前版本之外所有旧的Kernel安装包,以腾出空间。当然,如果想要彻底解决这个问题,可以参考上面的文章。

Hibernate Core API

整理一下Hibernate核心API的笔记,感谢马老师。因为博客的发布形式,中间内容有些节略和修改。

关于API文档

因为Hibernate是属于JBoss的,按照JBoss的商业模式,文档和技术支持是收费的,所以官方不提供离线文档下载,只提供在线文档查看。当然,总有热心的网友看不过去,所以网上有非官方整理的API文档可供参考。

Top 8 free readings

这是一个“信息大爆炸”的时代,在没有互联网的时候说这句话可能有人会怀疑,但是有了互联网之后大家都深信不疑。根据加州大学圣地亚哥分校的研究,一个典型的美国家庭在2008年平均收到3.6 ZB的信息,每人每天平均收到34 GB的信息,这只是2008年的研究结果,有人预测,每5年全世界的信息总量就会增加10倍。网络新闻、社交网络、邮箱、电视以及各种媒体每天都充斥你的左右,你是否也有信息焦虑症和选择困难症呢?