多线程相关知识
2017-09-04 15:29
399 查看
关于线程进程的理解一个例子:
进程:计算机核心cpu,如同一个工厂,时刻工作。但是工厂资源有限,一次只能运行一个车间(进程)。一个cup一次只能运行一个任务。
线程:一个车间里面包含很多员工,(线程)车间的空间对全部工人开发(每个线程都可以使用这些共享内存)。
但是空间有限,例如一个人在厕所,只能等待,为了不让别人打扰就需要上锁。自己结束后其他人在运行(一些内存资源读写时候必须一个线程结束后其他线程才可以使用资源)
操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
android的多线程工作。
java默认只有一个进程。主进程,android也是一样,只有一个主进程。主要负责界面交互。保证用户随时交互相应。
耗时操作必须开启一个工作线程,子线程。如果在主线程工作,会出现经典的ANR错误了。
为什么只能主线程更新ui?
为了安全, ui访问是没有锁的,多个线程访问ui出现各类不可控情况了,所以交给主线程控制最为安全。
子线程也可以更新ui!
有常规情况就会有例外!
1.SurfaceView是 android 里唯一一个可以在子线程更新的控件。SurfaceView绘制频繁,如果用主线程,很可能会堵
4000
塞。
为了提高效率。
2.在onceate中任何线程都可以操作ui,原因是 ViewRoot是判断线程的,但是ViewRoot在onResume()后才会产生。所以onCreate()可以无视这个规则。不过这个属于知道不要用到的方法,不然使用后,只要执行超过5s马上anr了。
总结:Android中多线程如果工作。ActivityThread是app的开始,初始化相关东西,其中会初始化一个死循环looper,他的核心就是不停的从MessageQueue获取到最新的消息展示到ui上。android中耗时操作在工作现场完成后都会通过message发送到MessageQueue等待后续的执行了。
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
http://www.jianshu.com/p/30e0bb519c4c
进程:计算机核心cpu,如同一个工厂,时刻工作。但是工厂资源有限,一次只能运行一个车间(进程)。一个cup一次只能运行一个任务。
线程:一个车间里面包含很多员工,(线程)车间的空间对全部工人开发(每个线程都可以使用这些共享内存)。
但是空间有限,例如一个人在厕所,只能等待,为了不让别人打扰就需要上锁。自己结束后其他人在运行(一些内存资源读写时候必须一个线程结束后其他线程才可以使用资源)
操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
android的多线程工作。
java默认只有一个进程。主进程,android也是一样,只有一个主进程。主要负责界面交互。保证用户随时交互相应。
耗时操作必须开启一个工作线程,子线程。如果在主线程工作,会出现经典的ANR错误了。
为什么只能主线程更新ui?
为了安全, ui访问是没有锁的,多个线程访问ui出现各类不可控情况了,所以交给主线程控制最为安全。
子线程也可以更新ui!
有常规情况就会有例外!
1.SurfaceView是 android 里唯一一个可以在子线程更新的控件。SurfaceView绘制频繁,如果用主线程,很可能会堵
4000
塞。
为了提高效率。
2.在onceate中任何线程都可以操作ui,原因是 ViewRoot是判断线程的,但是ViewRoot在onResume()后才会产生。所以onCreate()可以无视这个规则。不过这个属于知道不要用到的方法,不然使用后,只要执行超过5s马上anr了。
总结:Android中多线程如果工作。ActivityThread是app的开始,初始化相关东西,其中会初始化一个死循环looper,他的核心就是不停的从MessageQueue获取到最新的消息展示到ui上。android中耗时操作在工作现场完成后都会通过message发送到MessageQueue等待后续的执行了。
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
http://www.jianshu.com/p/30e0bb519c4c
相关文章推荐