background image

        }
    }

}

要想使线程成为后台线程,必须则在线程启动前调用 setDaemon()方法,才能把这个线
程设置为后台线程。当我们运行这个程序时候,发现没有任何结果打印到控制台,这就是
因为没有非后台线程(除了 main,main 是一个非后台线程)使得程序保持运行。因此,程
序没有打印任何信息就停止了。
  好了,现在回到我们讲到的第一个实例代码,我想根据这个代码改写下,写一个测
试框架,这个框架可以简化对我们遇到这种类型线程例子的测试工作。我们的 watcher
线程实际上是观察特定情况下监控对象内部是否违反了约束条件,对于客户而言,客户
指向知道我们定义的约束条件是否被违反了,还要知道这个违反约束条件的数值是多少 ,
如是我定义了下面的接口:
package cn.com.sxia;
public interface InvariantState {}
   这接口就是为了查看数值是否违反我们定义约束的接口,它有两个实现类:
  表示成功的:
package cn.com.sxia;
public class InvariantOK implements InvariantState {    }
   表示失败的:
package cn.com.sxia;
public class InvariantFailure implements InvariantState {
    public Object value;    
    public InvariantFailure(Object value)
    {
        this.value = value;
    }
}
   在 InvariantFailure 对象将包括一个对象,这个对象表示了有关失败原因的信息,
当监控到失败情况我们就可以打印出有关失败的错误信息。
  下面我们再定义一个接口,任何需要对我们定义的约束条件进行测试的类都必须要
实现这个接口:
package cn.com.sxia;
public interface Invariant {
    InvariantState invariant();
}
  为了防止程序因为所运行的平台(例如不同版本的 windows,linux,多核系统等)对
java 底层技术支持的问题我们再定义一个超时类,这个类当程序在一定时间内无法正常
运行时候,程序会自动终止,代码如下:
package cn.com.sxia;

import java.util.Timer;
import java.util.TimerTask;