run运行完Thread就结束了,那么下次怎么才能start这个thread呢?

时间:2022-08-09 17:44:08
我new了一个线程类MyThread对象dTread,并执行了dThread.start(),通过一个boolean变量mbOneCompeletedFlg来控制run的执行。
run代码如下:
public void run() {
while (!mbOneCompeletedFlg) {
try {
sleep(milliseconds);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

mHandle.sendEmptyMessage(0);
}
Log.d(TAG, "CompeletedThread is over");
}

那么,我把mbOneCompeletedFlg设置为true后,run就执行完了,下次再启动这个执行执行run的时候,是需要重新new一个MyThread对象吗?不能直接执行dThread.start()吧?
如果老是不停的new(例如1s new一次)会不会造成系统效率底?

12 个解决方案

#1


每次new就是一个新的线程,但是只要之前的线程运行完了,系统也会回收的,不过你要能保证之前的能运行完。
多线程对同一个对象操作的时候,一定要记得做好同步(通过synchronized),不然一堆线程同时访问一个对象会乱的。

#2


嗯。楼上说的没错。

#3


嗯,就是楼上所说的,应该就行了

#4


线程任务处理完没有 你自己是知道的啊 而且还有 Handle呢

#5


楼主问题 不能直接执行dThread.start()吗 ? 

#6


多谢各位。是直接执行dThread.start(),只是没搞清楚要不要每次都执行dThread = new MyThread();再执行dThread.start();

#7


一般run里面都是一个无限循环,线程结束后run才结束。

#8


那,跑完了后,还能不能dThread.start()了,为什么,谁能解释下,感兴趣,哈哈,过去不搞java,vc中句柄还在啊,java是不是就废了啊,必须new了

#9


貌似我该用线程池来管理线程,如果只是不停的创建,销毁的话,系统开销太大。

 在JAVA中,一个线程一旦运行完毕,即执行完其run()方法,就不可以重新启动了。此时这个线程对象也便成了无用对象,等待垃圾回收器的回收。下次想再启动这个线程时,必须重新new出一个线程对象再start之。频繁地创建和销毁对象不仅影响运行效率,还可能因无用线程对象来不及被回收而产生大量的垃圾内存,在存储空间和处理速度都相对受限的移动平台上这种影响尤为显著。
http://eyesye.javaeye.com/blog/234090

#10


恩,java的线程设计够2的了,哈哈,java vm真勤劳。

#11


学习中。。呵呵。。以后用现成可能还有很多

#12


重新再new一个对象,再调用start方法

#1


每次new就是一个新的线程,但是只要之前的线程运行完了,系统也会回收的,不过你要能保证之前的能运行完。
多线程对同一个对象操作的时候,一定要记得做好同步(通过synchronized),不然一堆线程同时访问一个对象会乱的。

#2


嗯。楼上说的没错。

#3


嗯,就是楼上所说的,应该就行了

#4


线程任务处理完没有 你自己是知道的啊 而且还有 Handle呢

#5


楼主问题 不能直接执行dThread.start()吗 ? 

#6


多谢各位。是直接执行dThread.start(),只是没搞清楚要不要每次都执行dThread = new MyThread();再执行dThread.start();

#7


一般run里面都是一个无限循环,线程结束后run才结束。

#8


那,跑完了后,还能不能dThread.start()了,为什么,谁能解释下,感兴趣,哈哈,过去不搞java,vc中句柄还在啊,java是不是就废了啊,必须new了

#9


貌似我该用线程池来管理线程,如果只是不停的创建,销毁的话,系统开销太大。

 在JAVA中,一个线程一旦运行完毕,即执行完其run()方法,就不可以重新启动了。此时这个线程对象也便成了无用对象,等待垃圾回收器的回收。下次想再启动这个线程时,必须重新new出一个线程对象再start之。频繁地创建和销毁对象不仅影响运行效率,还可能因无用线程对象来不及被回收而产生大量的垃圾内存,在存储空间和处理速度都相对受限的移动平台上这种影响尤为显著。
http://eyesye.javaeye.com/blog/234090

#10


恩,java的线程设计够2的了,哈哈,java vm真勤劳。

#11


学习中。。呵呵。。以后用现成可能还有很多

#12


重新再new一个对象,再调用start方法