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

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

弊端:创建大量线程容易消耗完系统内存以及导致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返回结果。

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

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

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

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

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

简单使用:继承AsyncTask

线程和AsyncTask基本概念已经使用_第1张图片

 

并行执行:

串行执行:

五、取消

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

使用场景1:

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

代码如下:

线程和AsyncTask基本概念已经使用_第2张图片

 

 

你可能感兴趣的:(线程)