关于WEB控制线程的问题,RESIN服务器
关于WEB控制线程的,写了个测试程序,服务器用RESIN,正常过程是:当客户端发出一个线程开始的动作时,线程正常运行,当客户端发出一个线程停止的动作时,线程结束;
现在的问题是,当客户端发出一个线程开始的动作时,线程正常运行,但在这个时候更改了别的javabean,服务器会自动加载javabean,并似乎清空了内存,这时候再从客户端发出一个停止线程的动作时,线程无法停止,怎么解决这个问题??
问题点数:100、回复次数:21Top
1 楼liuqstion(啊)回复于 2006-12-02 23:15:11 得分 0
顶顶。。Top
2 楼daixf_csdn(圣殿骑士【CNO】)回复于 2006-12-02 23:50:49 得分 10
学习Top
3 楼ftiger(哈哈鱼)回复于 2006-12-03 01:30:32 得分 10
线程用一个单态类来管理就好了。
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);
}
}
大概的意思,这个更多细节请找设计模式的资料。Top
4 楼ftiger(哈哈鱼)回复于 2006-12-03 01:35:34 得分 10
如果对模式要求不高的话事实上也可以放进application,这个的周期可以达到服务器关闭为止,用法和session差不多,只不过一个是有用户运行期有关,一个则是可看成是全局对象。Top
5 楼liuqstion(啊)回复于 2006-12-04 05:13:31 得分 0
楼上的代码看不明白,放入application试过了,仍然无法解决,中途改变了JAVABEAN后,RESIN清空了内存,但似乎JAVABEAN的内存它并没清空,我的测试代码如下:
javabean部分=========================SQLApplication.java
public class SQLApplication extends Thread {
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后无法再停止线程的问题。。。Top
6 楼liuqstion(啊)回复于 2006-12-04 05:16:48 得分 0
sql(soso, application, true);这行请注释掉就可以正常运行了。。
问题怎么解决??????请大家帮帮忙忙。。。。。。。。。
Top
7 楼alex_homer()回复于 2006-12-04 10:50:02 得分 10
长见识!Top
8 楼liuqstion(啊)回复于 2006-12-06 02:51:56 得分 0
顶一顶。。Top
9 楼lamb218()回复于 2006-12-06 10:21:36 得分 10
据我所致没有办法处理,当你修改了javabean后,resin会初始化servlet,所有内存清空。一般业务是不会这样做。Top
10 楼liuqstion(啊)回复于 2006-12-06 12:02:22 得分 0
不可能吧。。。那这么说WEB无法控制线程了??????Top
11 楼liuqstion(啊)回复于 2006-12-07 14:36:56 得分 0
再顶顶。。Top
12 楼liuqstion(啊)回复于 2006-12-09 12:05:27 得分 0
这么执着的顶着这帖,莫非就没人帮忙解答一下吗。。。。Top
13 楼DelphiStudy(拿下BCD就去搞C++)回复于 2006-12-09 13:02:26 得分 10
这种情况下恐怕没法控制,不如说说你想实现什么功能Top
14 楼liuqstion(啊)回复于 2006-12-09 13:40:02 得分 0
我想让WEB控制线程,就是简单的在IE上点一下鼠标,让线程开始down文件,它就down,让它stop,它就顺利stop....Top
15 楼liuqstion(啊)回复于 2006-12-10 09:38:49 得分 0
再顶.......Top
16 楼Javafan0(狂刀)回复于 2006-12-10 11:38:11 得分 0
帮顶Top
17 楼liuqstion(啊)回复于 2006-12-11 10:55:13 得分 0
谢谢楼上。。
顶。。Top
18 楼liuqstion(啊)回复于 2006-12-13 15:50:21 得分 0
顶Top
19 楼fool_leave(请及时结贴)回复于 2006-12-20 14:22:55 得分 40
用ServletContext来存储线程
ServletContext是换进context,不会随着session或者bean消失而消失。而且你这种情况用ServletContext来保存线程信息最好,本来j2ee环境给你提供这个context就是来存储这些信息的Top
20 楼liuqstion(啊)回复于 2006-12-20 17:38:26 得分 0
线程放到application里????怎么放???
upTop
21 楼liuqstion(啊)回复于 2006-12-20 17:40:00 得分 0
application确实不会随着session或bean小时而小时,但当重新加载了bean之后,application中的内容访问不到了
upTop




