我的意思是我new 了一个线程,thread =new my thread();
thread.start();
我在其它地方。thread.flag=false;
这时线程资源回收了吗?
如果我想继续运行,能不能thread.flag=true;
我用了不行,我设为true后,再用thread.start()也不行,
只能重新new ?请问怎么重新运行呢?我不想用不推荐的resume等方法。
thread.start();
我在其它地方。thread.flag=false;
这时线程资源回收了吗?
如果我想继续运行,能不能thread.flag=true;
我用了不行,我设为true后,再用thread.start()也不行,
只能重新new ?请问怎么重新运行呢?我不想用不推荐的resume等方法。
另外你对flag的使用存在问题,可以使用以下两个方法中的一个
1 volatile boolean flag2
while(true)
{
synchronized(this)
{
if(!flag) break;
}
}
当thread.stop()的时候.线程就别资源回收了!
当flag我true时候.线程工作,怎么会不行哟!
所以要不你重新new,要不不要让你的thread中止,如果你的run()方法一定要写成while(flag)这种方式,只有在你确定中止这个线程时才设flag为false,如果要等待或者暂停可以考虑用wait()
我在其它地方。thread.flag=false;
没有,并没有回收。。只是不这个线程不被执行而已。(因为threads 可以实行不同任务都是共享一个CPU的,但只是用了CPU一部分资源,所以在多thread中,一个thread不在执行的时候,CPU执行其他任务的时候速度会快一点。当这个thread不被执行的时候,自然CPU执行其他的资源就多了。。看看CPU利用率也就是这个意思)不知道你的什么书,
其实书上的意思是,建议你使用一种polling loop 的方式循环,检查flag这个变量。发现false就不执行,true再被执行。。但线程并没有被销毁。 因为如果销毁的,(Thread也是对象,)对象对反复的创建和释放是很费资源的。对于thread这中很轻量的对象在程序中很多的。会很影响程序运行效率。
如果是多线程的话,使用线程池吧。
你可以搜索相关资料。(关键字,多线程 java)
public void run(){
while(flag)
{
dosomething();
//---加一些,不需要dosomthing()的时候把flag 设置为false,或者发生异常的时候。
}}
讲得真好,,,
给我指明了学习的方向!我一定认真学习,吸取经验
Hard Hard Work
Good Good Study
Day Day Up
的方式生成一个为null的线程,然后在适当的方法调用位置完成定义thread=new Thread();
thread.start();
这样当run()中的代码执行完毕,线程会被释放,还可以通过调用这个方法,从新执行这个线程。
就好比。有时候你在程序中打开多个窗口,你把一个窗口关闭了,并不是把它销毁了,只是把它不显示而已。而真正应用程序关闭了,才是真正的资源释放。。