ClassNotFound & NoClassDefFoundError

java.lang.ClassNotFoundException 

This exception indicates that the class was not found on the classpath. This indicates that we were trying to load the class definition, and the class did not exist on the classpath.

java.lang.NoClassDefFoundError

This exception indicates that the JVM looked in its internal class definition data structure for the definition of a class and did not find it. This is different than saying that it could not be loaded from the classpath. Usually this indicates that we previously attempted to load a class from the classpath, but it failed for some reason – now we’re trying to use the class again (and thus need to load it, since it failed last time), but we’re not even going to try to load it, because we failed loading it earlier (and reasonably suspect that we would fail again). The earlier failure could be a ClassNotFoundException or an ExceptionInInitializerError (indicating a failure in the static initialization block) or any number of other problems. The point is, a NoClassDefFoundError is not necessarily a classpath problem.

Phabricator安装简介

简介

Phabricator不仅仅是一个应用,而是一个应用的合集,所有这些应用都是帮助软件公司开发出更好的软件。
Phabricator包括如下
– 代码审查
– 仓库管理
– Bug跟踪
– 项目管理
– 组内成员沟通
– …

Phabricator是开源项目,Phacility是开发这个项目的公司提供在网络上的付费版本。可以
注册测试账号去体验其功能。

web端使用

1. 首先需要注册账号
2. 完成注册后,进入管理主页面https://admin.phacility.com/
3. 在主页面创建一个实例(选择test类型,7天后数据自动删除)

本地安装

Phabricator最早是Facebook的人搞出来的,Facebook都知道用php比较多。因此这个项目也是用php开发的,也就是典型的LAMP架构。安装环境为Ubuntu 14 64位系统
1. github上下载安装脚本[shell](https://github.com/phacility/phabricator/blob/master/scripts/install/install_ubuntu.sh)
2. 运行脚本,完成一键安装。值得注意的是,这里会指定一个目录下载Phabricator的代码,需要记住
到这个步骤,我们已经把Phabricator需要的所有依赖已经安装完全,包括Apache、MySQL、PHP等。
接下来需要完成配置 继续阅读

Java并发工具CountdownLatch使用

简介

JDK下的java.util.concurrent包下藏了很多并发工具,其中大部分来自大师Doug Lea的手笔。这些工具的对于日常解决并发性问题,有着很大的帮助。今天,我们来介绍一下并发家族中的一个小兄弟 – CountdownLatch

场景

CountdownLatch,顾名思义,倒计时-锁,官方名叫闭锁。
它的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,没有任何线程能通过;
当到达结束状态时,这扇门会打开并允许所有的线程通过。当闭锁到达结束状态后,将不会改变状。
这里值得注意的是两个点:

  • CountdownLatch可以让一组线程在某个条件下同时启动
  • CountdownLatch状态一旦结束,状态不能再被改变

继续阅读