转载自:http://blog.youkuaiyun.com/u010687392/article/details/49850803
1、创建线程有两种方式:
(1)继承Thread类
(2)实现Runnable接口
区别:
在多线程访问同一资源的情况下,用Runnable接口创建的线程可以处理同一资源,而用Thread类创建的线程则各自独立处理,各自拥有自己的资源。
所以,在Java中大多数多线程程序都是通过实现Runnable来完成的,而对于Android来说也不例外,当涉及到需要开启线程去完成某件事时,我们都会这样写:
new Thread(new Runnable() {
@Override
publicvoidrun() {
//do sth .
}
}).start();
这段代码创建了一个线程并执行,它在任务结束后GC会自动回收该线程,一切看起来如此美妙,是的,它在线程并发不多的程序中确实不错,
而假如这个程序有很多地方需要开启大量线程来处理任务,那么如果还是用上述的方式去创建线程处理的话,那么将导致系统的性能表现的非常糟糕,
更别说在内存有限的移动设备上,主要的影响如下:
1、线程的创建和销毁都需要时间,当有大量的线程创建和销毁时,那么这些时间的消耗则比较明显,将导致性能上的缺失
2、大量的线程创建、执行和销毁是非常耗cpu和内存的,这样将直接影响系统的吞吐量,导致性能急剧下降,如果内存资源占用的比较多,还很
可能造成OOM
3、大量的线程的创建和销毁很容易导致GC频繁的执行,从而发生内存抖动现象,而发生了内存抖动,对于移动端来说,最大的影响就是造成界面卡顿
而针对上述所描述的问题,解决的办法归根到底就是:重用已有的线程,从而减少线程的创建。
所以这就涉及到线程池(ExecutorService)的概念了,线程池的基本作用就是进行线程的复用,下面将具体介绍线程池的使用
2、
ExecutorService
本文探讨了在Android应用中创建线程的两种方法:继承Thread类与实现Runnable接口,并对比了它们的区别。重点介绍了线程池(ExecutorService)的概念及其在避免性能问题方面的优势,特别是针对大量线程创建与销毁所带来的负面影响。
486

被折叠的 条评论
为什么被折叠?



