如何使用Hanlder在子线程之间的交互or主线程;线程的start,run方法的区别

2017-01-14 15:50:54来源:http://www.jianshu.com/p/9fdd44e2d546作者:上九楼的快活人点击

第七城市

1.如何实现子线程与子线程的交互(Timer,加Hanlder 实现)

2.另外线程的run方法与start方法的区别



以上为两根子线程;

最后贴上调用代码;




打印log 


结论:

一根线程只能有一个looper对象,所以在子线程里面实例化Handler必需要跟Looper关联,所以我们只需要记住在子线程里面实例化Hanlder对象需要调用Looper.prepare()准备,并且最后无线循环的读取消息Looper.loop(),随后借助handler收发信息即可;


run方法与start 区别

另外log里面也显示两根子线程确实是在子线程里面 ui线程在main线程里面,好我修改代码如下:




我们运行一下看看log:




我在MyThread的run 方法里面打印了log,获取当前的线程名字,如上;

是不是很奇怪,明明就是在子线程里面为什么变成了main线程?


修改代码:

myThread  = new MyThread();

myThread.start();


打印log如下:




可以看到对比结果很明显,一个在子线程另外一个在main线程;

结论:

通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。

然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程,

而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程,这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。

____

以上。

如果大家喜欢请关注我! 我会不定期推送笔者遇到的一些问题,以及文章;

谢谢。




第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台