应用程序服务子框架的实现了一个简单的线程编程模型来简化传统的线程开发,主要提供了以下功能:
Ø线程自身的启动(常规启动或作为守护线程启动)、关闭(常规关闭或粗暴关闭)
Ø线程自动循环执行,无需手工构建循环逻辑(也可手工构建)
Ø支持线程结束事件
Ø支持线程运行时阻塞状态监控及线程重新拉起
其对外线程编程接口是AppThreadImp抽象类,参考下面的类图:
类图中相关方法的描述说明,请参考Java API文档。简单例子如下:
package example.appsrv;
import com.beetle.framework.appsrv.AppThreadImp;
public class SimpleThread extends AppThreadImp {
public SimpleThread(int interval) {
super(interval);
}
protected void workProc() {// 工作方法,会自动循环执行,间隔时间interval毫秒
System.out.println(System.currentTimeMillis() + "-->do something...");
}
protected void end() {// 线程结束时,触发的事件
System.out.println(System.currentTimeMillis() + "-->end");
}
}
编写执行客户端端,代码如下:
package example.appsrv;
public class TestClient {
public static void main(String[] args) throws Throwable {
SimpleThread st=new SimpleThread(2000);//2秒钟循环执行一次
//st.joinThreadMonitor();//加入线程监控(若执行超时,监控器会将其重新拉起)
//st.startAsDaemon();//以守护线程模式启动
st.startNow();
Thread.sleep(10000);
//st.separateThreadMonitor();//脱离监控
//st.stopBrutally();//粗暴结束线程
st.stopNow();//停止线程
}
}
执行代码:
package example.appsrv;
public class TestClient {
public static void main(String[] args) throws Throwable {
new SimpleThread(2000).startNow();
Thread.sleep(10000);
}
}
执行结果:
1235526856865-->do something...
1235526858866-->do something...
1235526860867-->do something...
1235526862868-->do something...
1235526864868-->do something...
1235526864868-->end
可见,相对传统的java线程编程,上面代码确实简便和简化不少。在我们应用服务程序框架中,图5-1中的功能子模块编程模型,对应就是AppThreadImp抽象类。功能模块具体指利用线程实现功能在后台长期执行;如果执行一次就结束,完成一个任务计算,在BJAF框架中,我们定义为子程序(SubRoutine),我们下一小节介绍。