开启服务器,自动加载类是否需要开辟新的线程研究
来源:互联网 发布:ipad推荐 知乎 编辑:程序博客网 时间:2024/05/20 05:27
有些应用需要在开启服务器的时候自动先加载自己写好的类。比如监听串口通信等等。
那么在开启服务钱对类的加载是否需要开辟一个新的线程呢。下面对该想法做了一下测试。
1.首先在web.xml添加要加载的类:
<servlet>
<servlet-name>startup</servlet-name>
<servlet-class>com.env.persistence.util.DataBufferReader</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>startup2</servlet-name>
<servlet-class>com.env.persistence.util.DataBufferReader2</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
这里我想加载DataBufferReader,DataBufferReader2,有顺序加载。对两个类进行测试。
2.在对应的包下面创建两个类,代码如下:
DataBufferReader:
public class DataBufferReader extends HttpServlet {
@Override
public void init() throws ServletException {
while(true){
System.out.println("11111");
}
}
}
DataBufferReader2:
public class DataBufferReader2 extends HttpServlet {
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
System.out.println("222222");
}
}
DataBufferReader是一个死循环。DataBufferReader2是一个简单显示函数。
测试结果DataBufferReader2没被加载,web访问服务器失败。
接着对DataBufferReader进行改进:
public class DataBufferReader extends HttpServlet {
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
Start st=new Start();
Thread thread=new Thread(st);
thread.start();
}
class Start implements Runnable{
public void run() {
// TODO Auto-generated method stub
while(true){
System.out.println("!!!");
}
}
}
}
DataBufferReader把死循环加载进一个线程里面。DataBufferReader2执行,web可以访问服务器。
接着对DataBufferReader再进行试验:
public class DataBufferReader extends HttpServlet {
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
Timer timer=new Timer();
timer.schedule(new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("!!!!!!!!!!!!");
}
},0, 1000);
}
}
DataBufferReader方法改为定时执行。DataBufferReader2执行,web可以访问服务器。
得出结论:只要不是死循环,连续执行的方法不用开线程。只要满足程序能够分得被时间片加载完整即可,不过有一种情况需要就是需要加载的方法很费时,为了不影响加载速度需要开启一个新的线程,特殊情况特殊处理。
PS:按照java的官方文档说明,Timer类会自动启动一个新线程,而多个Timer类则会有开辟多个线程,同时Timer类的线程是非daemon(守护)线程,所以一旦启动除非明确cancel掉,是一直存在的。
以上均是个人测试的小例子,可能在大的应用中并不是这样加载层序,在此仅供菜鸟学习。忘批评指正。
- 开启服务器,自动加载类是否需要开辟新的线程研究
- 开辟一个新线程Thread
- 开辟新的生活
- 开辟新的天地
- 执行更新版本获取服务器连接必须开启一个新的线程
- Android 的网络请求需要开辟子线程的原因 +程序实例
- 开辟新战场,打造新的商业模式
- GCD的简单使用,开辟一条新的线程,让上面的任务串行执行
- 并行编程是否需要新的程序语言
- 互联网是否需要新的领导者?
- Android 开启新线程
- Android开辟一个新的线程简单介绍(Thread,Handler)
- java中开辟新线程的两种方法以及区别
- 开启线程后开辟stacksize 最小为多少
- tomcat服务器自动开启
- AutoCAD启动自动加载程序的研究
- 新linux服务器需要安装的模块
- 为何在此开辟新的据点?
- opendir 、readdir 小结
- QListView
- c++中的类型转换
- sql STUFF用法
- Android学习笔记:Android基础知识总结
- 开启服务器,自动加载类是否需要开辟新的线程研究
- ssh-note
- Java学习者的25个目标
- 设计模式——工厂模式(factory)
- AlertDialog使用实例
- 使用ubuntu安装邮件服务器Postfix发送邮件的过程
- 比较好的java JSON实现
- matlab cov 函数解析
- java 中session和cookie的使用