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),不然一堆线程同时访问一个对象会乱的。
多线程对同一个对象操作的时候,一定要记得做好同步(通过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
在JAVA中,一个线程一旦运行完毕,即执行完其run()方法,就不可以重新启动了。此时这个线程对象也便成了无用对象,等待垃圾回收器的回收。下次想再启动这个线程时,必须重新new出一个线程对象再start之。频繁地创建和销毁对象不仅影响运行效率,还可能因无用线程对象来不及被回收而产生大量的垃圾内存,在存储空间和处理速度都相对受限的移动平台上这种影响尤为显著。
http://eyesye.javaeye.com/blog/234090
#10
恩,java的线程设计够2的了,哈哈,java vm真勤劳。
#11
学习中。。呵呵。。以后用现成可能还有很多
#12
重新再new一个对象,再调用start方法
#1
每次new就是一个新的线程,但是只要之前的线程运行完了,系统也会回收的,不过你要能保证之前的能运行完。
多线程对同一个对象操作的时候,一定要记得做好同步(通过synchronized),不然一堆线程同时访问一个对象会乱的。
多线程对同一个对象操作的时候,一定要记得做好同步(通过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
在JAVA中,一个线程一旦运行完毕,即执行完其run()方法,就不可以重新启动了。此时这个线程对象也便成了无用对象,等待垃圾回收器的回收。下次想再启动这个线程时,必须重新new出一个线程对象再start之。频繁地创建和销毁对象不仅影响运行效率,还可能因无用线程对象来不及被回收而产生大量的垃圾内存,在存储空间和处理速度都相对受限的移动平台上这种影响尤为显著。
http://eyesye.javaeye.com/blog/234090
#10
恩,java的线程设计够2的了,哈哈,java vm真勤劳。
#11
学习中。。呵呵。。以后用现成可能还有很多
#12
重新再new一个对象,再调用start方法