本帖最后由 gyj20061111 于 2010-01-16 11:54:19 编辑

解决方案 »

  1.   


    小弟才疏学浅可能没理解你的问题,呵呵,等楼下。 我不认为web和java获取线程有什么区别。
      

  2.   

    可以写一个线程管理类。
    这个类有 4 个静态的公开的布尔型变量:启动、暂停、继续、停止,使用 servlet 将客户端对这些变量进行控制。
    启动为 true 时,启动线程
    线程类里的 run 方法可以受线程管理类的 暂停、继续、停止 变量控制:
    public void run(){
        while(!停止){
            if(暂停){
                System.out.println("暂停");
            }else if(){
                System.out.println("继续");
            }
        }
    }
      

  3.   

    http://topic.csdn.net/u/20100106/17/1718098a-03d8-4b77-98f6-9250671def84.html
    这个帖子里有多线程管理的列子 感觉很适用你现在的情况  例子在帖子中间部分应用到WEB一样可以 希望对你有帮助
      

  4.   

    这样啊。可以把线程管理类改写成一个 javaBean,有 3 个布尔型的实例变量:暂停、继续、停止,还有一个私有的线程实例变量。
    点击启动时,新建一个线程管理类。使用 servlet 将客户端对这些变量进行控制(相当于对线程进行控制)。
      

  5.   


    谢谢你,我想这样不知道可不可行,在线程启动的时候,将每个线程保存到Map中,然后在前台触发事件的时候通过传递不同的key值来获得对应的线程对象进行操作,不知道这样可不可行。另外,不知道这些线程能不能脱离应用,因为如果一个线程启动后,只要你不停止服务器,哪怕你停止了应用,这个线程还处于运行状态,我想说,即使这个应用停止后,还能不能获取到这些线程的操作句柄呢?
      

  6.   

    我想这样不知道可不可行 --> 所有的都是解决方案,可以去尝试一下。真解决不了再想其他途径;
    线程启动的时候,将每个线程保存到Map中 --> 这个想法不错。可以去试试。如果线程停止,可以将其在容器中 remove掉;
    这个应用停止后,还能不能获取到这些线程的操作句柄 --> 你考虑的太多了。进程的启动依赖于虚拟机的启动,线程的运行依赖于进程。一旦你退出进程,所有这个进程中启动的线程也就自行消亡了,无须你手工去一个个停止。
      

  7.   

    Hello, defonds:  这个应用停止后,还能不能获取到这些线程的操作句柄 --> 你考虑的太多了。进程的启动依赖于虚拟机的启动,线程的运行依赖于进程。一旦你退出进程,所有这个进程中启动的线程也就自行消亡了,无须你手工去一个个停止。你所说的其实就是在关闭服务器的时候,所有的线程就会自行消亡,这是对的。但是一个服务器上一般挂了多个应用,打个比方,我们用的IBM 的WebSphere作服务器,上面挂了多个应用,不是随便就停止的,比如我们的服务器上的一个应用在启动的时候启动一个线程来发送邮件,现在如果我想暂停发送邮件,不可能去停止整个服务器吧。
      

  8.   

    你所需要的不是 servlet 范围的程序,而是服务器守护进程,不过是提供一个 web 管理界面而已,这并不是要紧的。
      

  9.   

    看来你们的应用比我想象的要复杂。
    但是再复杂的应用、再强大的程序,其运行机制都是一样的。麻雀虽小,无脏俱全。原理性的东西都是一样的。
    我觉得既然线程的销毁和启动都和应用挂钩,而不依赖于服务器,那就可以让它们依赖于应用啊。应用退出的时候,依赖于它的线程自行销毁。
    举个例子:你的服务器进程 A ,A 启动实现特殊功能的进程 B,B 进程中启动一系列线程。这样 B 进程退出的时候,那些线程也就不存在了。无需要你在 A 进程中再去处理它们。
      

  10.   

    A 启动实现特殊功能的进程 B,B 进程中启动一系列线程。
    这句小弟就真不知道在程序中如何控制了。
      

  11.   

    去看看 java.lang.Process 和 java.lang.ProcessBuilder 的 API 吧。
      

  12.   

    楼主啊,你把问题想复杂了,控制线程并不需要真正的像JMX那样去监控、管理线程。
    给你个实现思路(具体关于Thread的详细使用就不细说):
    在容器启动时,创建线程实例对象并启动后,通过线程名做标识存入静态集合变量中供页面使用。
    实现,暂停、继续、停止方法,这四个方法之间的通信可以通过变量标志或常用的线程通信synchronized,wait,notifyAll来实现,但因为是web系统,所以要保障并发访问的线程安全问题。
      

  13.   


    非常感谢你的方法,我想值得一试。你可以去看一下12楼的描述就知道为什么有JMX一说了。