在用多线程时,可在run()方法体中调用yield()方法来结束当前线程。
现在的问题是,如果一个线程正在运行,如何在run()方法体之外让它主动放弃CPU,完全
停止?

解决方案 »

  1.   

    flag??
    能说的具体些吗?用什么代码
      

  2.   

    这个要看情况的。比如:Thread.sleep(xxxL)就是让当前运行的线程放弃cpu,可是他不会放弃锁。设flag的意思是,在run()里面,while(condition) {}后面调用setCond(true) or setCond(false)
    用t.join()是指让当前运行的线程一直等到t线程运行完了,当前线程才运行。他也是放弃cpu.
      

  3.   

    首先yield()方法并不能结束当前线程。它的作用是使占用当前CPU资源的线程,主动让出CPU给跟它优先级同等的线程进入就绪状态,而它本身并没有结束,只是被放到了CPU资源等待队列的最后。当前面的线程或休眠或中断或终止后,它仍然会被唤醒。
    让一个线程在没有执行完run()方法前,结束,有两个办法。
    一个比较好的方法,楼上的解释得很清楚,加标志位,你可以按照自己的意愿,随时停止它。
    另一个是在改线程sleep后,调用interrup()方法,中断它。