CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

关于WEB控制线程的问题,RESIN服务器

楼主liuqstion(啊)2006-12-02 18:21:18 在 Java / Web 开发 提问

关于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

相关问题

关键词

得分解答快速导航

  • 帖主:liuqstion
  • daixf_csdn
  • ftiger
  • ftiger
  • alex_homer
  • lamb218
  • DelphiStudy
  • fool_leave

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo