线程学习笔记

一、线程创建

1、继承线程 Thread 类:
·class TestThread extends Thread

2、实现 Runnable 接口
·class TestThread implements Runnable
·然后 new Thread(new Thread()).start
·这里实际上是new TestThread() 这个实现 Runnable 接口的类,然后把这个类传入Thread
·源码中,内部保存 TestThread ,然后默认的Thread run 方法执行 TestThread 的 run 方法

3、匿名类
·new Thread(new Runnable())

4、使用 lambda
·new Thread(()->{线程执行体}).start();

二、线程生命周期

线程对象使用 isAlive() 方法判断线程状态。就绪、运行、阻塞时值为true,新建、死亡状态为false。

1、新建
·新建一个线程

2、就绪
·已经start,等待CPU 获取执行权

3、运行
·已经获取执行权,开始执行Run() 方法的线程执行体,线程处于运行状态

4、阻塞
·线程在运行的过程中暂停等待某个条件触发

5、死亡(线程结束状态)
·run() 或者 call() 方法执行完成,线程正常结束
·线程跑出一个未被捕捉的 Exception 或者 Error
·调用改线程的stop() 方法结束线程,容易造成线程死锁(死锁–两个及以上线程同时持有对方所需要的资源)
·可以Boolean 标记的形式完成线程,只要在某一情况下将标记改变让循环停止即可结束线程

三、Android 中多线程实现方式

1、Handler + Thread
(1)优缺点
· Handler用法简单明了,可以将多个异步任务更新UI的代码放在一起,清晰明了
· 处理单个异步任务代码略显多
(2)使用范围
·多个异步任务的更新UI
(3)使用
·新建一个Handler对象,重写其中的handlerMessage()
·新建一个线程,执行线程执行体,子线程使用Handler发送信息通知主线程更新
·根据信息触发handlerMessage()这个回调方法来执行UI界面的更新

2、AsyncTask(轻量级异步类)
(1)优缺点
· 处理单个异步任务简单,可以获取到异步任务的进度
·可以通过cancel方法取消还没执行完的AsyncTask
· 处理多个异步任务代码显得较多
(2)适用范围
·单个异步任务的处理
(3)使用
·创建 AsyncTask 子类 & 根据需求实现核心方法
·创建 AsyncTask子类的实例对象(即 任务实例)
·手动调用execute() 从而执行异步线程任务

3、IntentService
(1)一个可以处理异步任务的简单Service
(2)使用
·继承IntentService
·实现不带参数的构造方法,并且调用父类的IntentService的构造方法

4、ThreadPoolExecutor
·适用范围——批处理任务

四、线程阻塞原因

1、等待I/O流的输入输出
2、等待网络资源,即网速问题
3、调用sleep() 方法,需要等待sleep 时间结束
4、调用wait() 方法,需要调用 notify() 唤醒线程
5、其他线程执行join() 方法,当前线程则会阻塞,需要等其他线程执行完毕

学习的博客链接
https://www.jianshu.com/p/ee1342fcf5e7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值