线程和AsyncTask基本概念已经使用

本文深入探讨了线程的基础概念,包括线程作为程序最小的调度单位、资源共享及线程安全问题。同时,详细介绍了实现线程的三种方法:继承Thread类、实现Runnable接口和Callable接口,并对比了Thread的run()与start()方法的区别。此外,文章还讲解了AsyncTask的参数含义、执行方法及其取消机制,帮助读者理解并行与串行任务的执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程是程序最小的调度单位,在同一进程中的资源是共享的,可以理解为:多线程可以同享同一个变量,但是需要注意线程安全问题,小心会产生售票问题

弊端:创建大量线程容易消耗完系统内存以及导致cpu的频繁切换造成系统死机

实现线程的方法:

一、一种是类继承Thread

二、一种是实现接口Runnable

Thread调用方法:

Thread thread=new Thread();

1、thread.run();

2、thread.start();

run()只是调用了Thread实例的run()方法而已,需要等到run方法体中的任务执行完之后,才会执行后面的代码,还是运行在主线程中

start()无需等待run方法体中的任务结束,再执行后面的代码,会开辟一个新的线程,此时run()才会运行在新的线程中。

三、一种实现接口Callable 

第一、二方式都是在任务结束后无法获取结果,所以在java1.5以后,提供了Callable和Future,可以获取执行结果。

四、AsyncTask参数含义以及重要方法

AsyncTask<Params,Progress,Result>参数含义:Params:传入参数,Progress:任务执行进度,Result返回结果。

asyncTask即支持串行也支持并行,串行方法execute()、并行方法executeOnExecutor()

onPreExecute()在主线程中执行,做准备工作

doInbackground(Params...params)子线程在后台执行任务

onProgressUpdate(Progress value)在子线程中执行任务,更新UI

onPostExecute(Result result)在主线程中执行,返回doInbackground()的值

简单使用:继承AsyncTask

 

并行执行:

串行执行:

五、取消

在AysncTask中,是没有办法直接取消执行中的任务的,只能把AsyncTask的标记状态改成cancel状态,未执行的任务是可以直接取消的,那么怎么取消正在执行的任务呢?既然我们的任务都是在doInBackground(String... params)执行的,那么我们就需要在这里处理了。

使用场景1:

在页面不可见或者退出时调用myAsyncTask.cancel(true),然后在doInBackground(String... params)中通过if (isCancelled()){break;}

代码如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值