我的意思是我new 了一个线程,thread =new my thread();
thread.start();
我在其它地方。thread.flag=false;
这时线程资源回收了吗?
如果我想继续运行,能不能thread.flag=true;
我用了不行,我设为true后,再用thread.start()也不行,
只能重新new ?请问怎么重新运行呢?我不想用不推荐的resume等方法。

解决方案 »

  1.   

    run()方法执行完之后,也就是线程退出后,如果没有其它引用指向这个线程,那么资源就可以被回收。再用thread.start()是无效的。
    另外你对flag的使用存在问题,可以使用以下两个方法中的一个
    1 volatile boolean flag2 
    while(true)
    {
      synchronized(this)
      {
         if(!flag) break;
      }
    }
      

  2.   

    重新启动一个线程就象书上说的那样,最好设置个flag已达到标识的作用!
    当thread.stop()的时候.线程就别资源回收了!
    当flag我true时候.线程工作,怎么会不行哟!
      

  3.   

    run()执行完之后thread就中止了,thread不能重新运行
    所以要不你重新new,要不不要让你的thread中止,如果你的run()方法一定要写成while(flag)这种方式,只有在你确定中止这个线程时才设flag为false,如果要等待或者暂停可以考虑用wait()
      

  4.   

    如果要暂时中止的话为什么不用 wait()方法呢,等要唤醒的时候再用notify()就是了
      

  5.   

    stop已经被废弃了,不建议使用的。因为它会停止线程并且释放所有的所。
    我在其它地方。thread.flag=false;
    没有,并没有回收。。只是不这个线程不被执行而已。(因为threads 可以实行不同任务都是共享一个CPU的,但只是用了CPU一部分资源,所以在多thread中,一个thread不在执行的时候,CPU执行其他任务的时候速度会快一点。当这个thread不被执行的时候,自然CPU执行其他的资源就多了。。看看CPU利用率也就是这个意思)不知道你的什么书,
    其实书上的意思是,建议你使用一种polling loop 的方式循环,检查flag这个变量。发现false就不执行,true再被执行。。但线程并没有被销毁。 因为如果销毁的,(Thread也是对象,)对象对反复的创建和释放是很费资源的。对于thread这中很轻量的对象在程序中很多的。会很影响程序运行效率。
    如果是多线程的话,使用线程池吧。
    你可以搜索相关资料。(关键字,多线程 java)
      

  6.   


    public void run(){
    while(flag)
    {
    dosomething();
      //---加一些,不需要dosomthing()的时候把flag 设置为false,或者发生异常的时候。
    }}
      

  7.   

    可是当flag为ture的时候是个死循环啊,我试过了,加为false也不停。
      

  8.   

    totodo(土豆仙)
    讲得真好,,,
    给我指明了学习的方向!我一定认真学习,吸取经验
    Hard Hard Work
    Good Good Study
    Day Day Up
      

  9.   

    可以在类的开头部分使用Thread thread=null;
    的方式生成一个为null的线程,然后在适当的方法调用位置完成定义thread=new Thread();
    thread.start();
    这样当run()中的代码执行完毕,线程会被释放,还可以通过调用这个方法,从新执行这个线程。
      

  10.   

    rujor(rujor) 是啊,线程是不停的。。但是! while(true) 那部分就不执行了。
    就好比。有时候你在程序中打开多个窗口,你把一个窗口关闭了,并不是把它销毁了,只是把它不显示而已。而真正应用程序关闭了,才是真正的资源释放。。