首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android开发多线程各种创建方式

文章目录

两种基本的创建线程方式

这两种创建方式的区别

AsyncTask

HandlerThread

IntentService

ThreadPoolExecutor

两种基本的创建线程方式

最基本的创建方式,我们通过实现Runnable接口,或者继承自Thread类,覆写run方法。

继承Thread类,覆写run方法

运行结果:

实现Runnable接口,实现run方法

运行结果

这两种创建方式的区别

这两种创建方式最主要的区别是实现Runnable接口的方式创建,可以给多个Thread用,这样子的话可以共享数据。但是也要注意线程安全问题。

如果使用继承Thread的方式创建,则无法共享数据。

推荐使用实现Runnable实现run方法的方式去创建线程。

AsyncTask

有些同学可以没有听过AsyncTask,现在基本上不使用了,同学们了解一下就行。

AsyncTask是一个轻量级的异步任务执行工具

AsyncTask enables proper and easy use of the UI thread.

第一种创建方式:

运行结果:

AsyncTask的缺点:默认使用串行的线程池执行任务。

也就是说,如果往这个池里创建10AsyncTask任务,有一个一直没结束,比如说阻塞,休眠,那么其他的就无法执行了。

所以我们使用的时候,要把Executor设置为并行的。

第二种创建方式:

直接执行Runnable接口实现类(串行执行)

执行结果:

修改成并行的执行方式

这样子呢,就可以并发地执行了,如果多个任务的话。

这两种创建方式的区别很明显。前者可以知道结果,方便管理和控制。

HandlerThread

HandlerThread适用于轮询场景,通过发送消息的形式执行任务,这也是一个串行的执行方式。

这个用得比较少,一般是主线程的Handler用得比较多。在子线程给主线程发送消息。

比如说我们在子线程请求数据,然后向主线程发送结果。

另外,HandlerThread构造方法,有多个重载方法,还可以传入优先级。不传则为默认优先级。

IntentService

IntentService是个服务,它可以于后台运行。常用于我们需要跨界面获取到后台任务执行进度,比如说我们上传东西,下载东西。

它执行完任务则会结束服务。

执行结果:

ThreadPoolExecutor

线程池的话重复使用线程,减少线程创建和销毁的开销。使用于频繁的,消耗资源相对少的操作。

然后把任务扔到池里执行

其他的线程池请查看文档吧。当然啦,也可以自定义线程池

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200923A0JCB200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券