关于WEB控制线程的,写了个测试程序,服务器用RESIN,正常过程是:当客户端发出一个线程开始的动作时,线程正常运行,当客户端发出一个线程停止的动作时,线程结束;
现在的问题是,当客户端发出一个线程开始的动作时,线程正常运行,但在这个时候更改了别的javabean,服务器会自动加载javabean,并似乎清空了内存,这时候再从客户端发出一个停止线程的动作时,线程无法停止,怎么解决这个问题?? 另外一个帖子:http://community.csdn.net/Expert/TopicView.asp?id=5202091
现在的问题是,当客户端发出一个线程开始的动作时,线程正常运行,但在这个时候更改了别的javabean,服务器会自动加载javabean,并似乎清空了内存,这时候再从客户端发出一个停止线程的动作时,线程无法停止,怎么解决这个问题?? 另外一个帖子:http://community.csdn.net/Expert/TopicView.asp?id=5202091
你每次都new一个新的线程,这样当然达不到你要的效果。。
如果用单态,好像也不满足你的要求。
你把new的线程放到session中看看可以不?
从session中取线程,取不到就new一个
to piaopiao11,session中怎么放??如果放到session中我还是想象不出怎么才能放到session中,session是跟随每个用户生成的,服务器中的线程是所有用户的。。
up
servletContext.setAttribute("ThreadName",thread);多方便,比session要安全多了
是application.setAttribute("ThreadName",new SQLApplication().start());???
你可以通过ListenerServlet来实现
public void contextInitialized(ServletContextEvent sce) {
//得到并传输context
m_context = sce.getServletContext();
//将ThreadManager放到环紧中
m_context.setAttribute("ThreadManager",threadManager);
lz这样的问题,包括可能遇到的数据库处理,都属于有状态模块,而web框架是无状态的,干嘛那么牵强的去做呢?直接用ListenerServlet,它就是用来处理有状态的需求的,多好。j2ee一定要先弄懂servlet
主要是有这样的需要,因为下载这个工作可以提交给服务器去做,用户只需要发出下载的需求就可以退出,后台的线程完成了工作之后,用户下次来时可以看到结果,这就是为什么一定需要WEB控制线程
还有另外一种需求,就是为了避免频繁的数据操作,而把用户所需要的请求缓存到内存中,而更新数据的工作可以由线程来定时完成,控制线程的工作可以直接WEB查看、中断。
如果你以前没有用过ListenerServlet的话,趁这个机会好好学学吧,纯粹的web服务能够解决的问题太有限了,而ListenerServlet对有状态的服务很起作用的。