6.7.2. 多线程执行

优质
小牛编辑
138浏览
2023-12-01

6.7.2.多线程执行

与在单线程中阻塞相比,更好的做法是让程序运行在多个线程之中。系统负责分配CPU时间,几个线程仿佛在同一时刻同时运行。这样可以避免某线程独占计算资源。

图6.10. 多线程执行

在例子中,我们将网络操作的相关代码放到独立的线程里面。这样我们的主线程可以避免阻塞在网络操作上,用户界面不会响应不灵。按惯例,我们一般认为主线程是运行于前台,而其它的线程都是运行于后台。这是因为前端的用户界面运行于主线程。但在调度上,它们都是平等的。图6.10 "多线程执行"展示了拥有两个线程——UI线程和一个辅助线程——的时候,代码的执行过程。

使用多线程的方法有很多,Java的Thread类是其中之一。使用Thread类,就是使用Java的原生特性。

但这里有一点,那就是Java线程不可以直接访问其它线程的私有数据,比如UI线程中的控件。这样设计可以避免一些同步问题。比如UI线程若在执行中,就并不希望其它线程来扰乱自己的状态。

为弥补这点不足,也作为Java标准的线程机制的补充,Android提供了一个AsyncTask类。