关于WEB控制线程的,写了个测试程序,服务器用RESIN,正常过程是:当客户端发出一个线程开始的动作时,线程正常运行,当客户端发出一个线程停止的动作时,线程结束;
现在的问题是,当客户端发出一个线程开始的动作时,线程正常运行,但在这个时候更改了别的javabean,服务器会自动加载javabean,并似乎清空了内存,这时候再从客户端发出一个停止线程的动作时,线程无法停止,怎么解决这个问题??
现在的问题是,当客户端发出一个线程开始的动作时,线程正常运行,但在这个时候更改了别的javabean,服务器会自动加载javabean,并似乎清空了内存,这时候再从客户端发出一个停止线程的动作时,线程无法停止,怎么解决这个问题??
interface MyThread{
public String getId();
public void start();
public void stop();
}
public ThreadM {
private static ThreadM instand = new ThreadM ();
private Map <String , MyThread>threadMap = new ()HashMap <String , MyThread>();
private ThreadM (){//
} public static ThreadM getInstant(){
return instand ;
} public void putThread(MyThread mt){
threadMap.put(mt.getId(), mt);
} public MyThread getThread(String id){
return threadMap.get(id);
}
}大概的意思,这个更多细节请找设计模式的资料。
public static volatile boolean isStop = true; public void run() {
System.out.println("线程开始");
while (!isStop) {
System.out.print(this.getName());
System.out.print(" ");
System.out.println(System.currentTimeMillis());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} System.out.println("线程结束");
} public void tt(String soso, ServletContext application) {
if (null == application.getAttribute(soso)) {
application.setAttribute(soso,"start");
sql(soso, application, true);
if (!this.isInterrupted()) {
isStop = false;
this.start();//启动更新数据线程
System.out.println("启动线程,当前线程状态:" + this.isInterrupted());
}
}
}
}JSP控制部分======================test.jsp:<a href="?action=stopthread">停止线程</a>
<a href="?action=startthread">开始线程</a>
<%
String action = request.getParameter("action");
if (null != action && action.equals("stopthread")) {
SQLApplication.isStop = true;
out.println("操作结束");
return;
}
if (null != action && action.equals("startthread")) {
SQLApplication s = new SQLApplication();
if (!s.isInterrupted()) {
SQLApplication.isStop = false;
s.start();
}
out.println("操作结束");
return;
}
SQLApplication s = new SQLApplication();
s.tt("aaa", application);
%>
帮忙看看,怎么解决RESIN自动加载某个类或加载win.xml后无法再停止线程的问题
问题怎么解决??????请大家帮帮忙忙
ServletContext是换进context,不会随着session或者bean消失而消失。而且你这种情况用ServletContext来保存线程信息最好,本来j2ee环境给你提供这个context就是来存储这些信息的
up