Android线程

线程的基本概念

线程,可以看作是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

主线程是指进程拥有的线程,或叫UI线程,Java中默认情况下一个进程只有一个线程,这个线程就是主线程。主线程不能执行耗时的任务,所以在一些耗时处理时,就得使用子线程。Android沿用了Java的线程模型,从Android3.0开始系统要求网络访问也必须在子线程中进行,否则网络访问将会失败并抛出NetworkOnMainThreadException异常。在Android里如果主线程被执行耗时任务导致阻塞后还会造成ANR的发生。

线程的状态

线程五个基本状态:

新建状态(New)线程对象创建后就会进入了新建状态,如:Thread t = new MyThread();

就绪状态(Runnable)当调用线程对象的start()方法后,如:t.start();,线程进入就绪状态。此状态的线程只是明确做好了准备,随时等待CPU调度执行,并未开始执行

运行状态(Running)当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。

阻塞状态(Blocked)处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,阻塞状态后要再到运行状态,必须是先经过就绪状态。

死亡状态(Dead)线程执行完了或者因异常退出了run()方法,该线程结束生命周期

线程的阻塞情况

等待阻塞:运行状态中的线程执行一个对象wait()方法挂起线程时,使本线程进入到等待阻塞状态,直到其他线程执行notify()或者notifyAll()方法。

同步阻塞:线程执行一段同步代码,但尚无法获得相关同步锁,例如获取synchronized同步锁失败(因为锁被其它线程所占用),那么线程会进入同步阻塞状态,直到等到获取同步锁。

其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

线程的实现方式

Java中主要提供两种方式实现线程,分别为继承java.lang.Thread类与实现java.lang.Runnable接口。

Thread是操作系统层面的线程,它用于执行耗时操作或者需要对UI进行操作的任务。Thread是一个类,它继承自Java的Thread类,使用Thread创建新线程的方式是继承Thread类,然后重写run()方法,在run()方法中定义线程要执行的代码。线程启动的时候,调用Thread的start()方法。

Runnable是一个接口,它定义了线程要执行的任务,使用Runable创建新线程的方式是创建一个Runnable实例,然后将它作为参数传递给Thread的构造方法。所以,Runnable是一种更加灵活的方式,因为它可以很容易地实现多个接口,从而实现多个任务的执行。另外,由于Java只支持单继承,如果一个类已经继承了其他类,就无法再继承Thread类了,这时候就只能使用Runnable接口了。

线程组

为了方便某些具有相同功能的线程进行管理,我们可以把线程归属到某一个线程组。线程组中可以有线程对象、线程,类似于树的形式。Java线程组(Thread Group)是一种用于组织线程的机制。线程组可以将一组线程作为一个单元进行管理,并且可以方便地对这组线程进行控制和监视。线程组可以形成一个层次结构,其中每个线程组都可以包含其他线程组和线程。线程组提供了以下功能:

线程组可以用于设置线程的优先级、守护状态和未捕获异常处理器。

  • 可以通过调用线程组的interrupt()方法中断线程组中的所有线程。

  • 可以通过调用线程组的stop()方法停止线程组中的所有线程。

  • 可以使用线程组的enumerate()方法获取线程组中的所有线程。

线程组的作用就是可以批量的管理线程或线程对象,有效地对线程或者线程对象进行组织。

开发人员创建的所有线程,都属于指定线程组;若没显式指定属于哪个线程组,则该线程就属于默认线程组,即main线程组。缺省情况下,子线程和父线程处于同一个线程组。说明:创建线程时,可指定其归属的线程组;线程运行中,不能改变它的归属线程组;即线程一旦指定所在的线程组就不可改变。

Android Thread介绍

Android中的线程机制是通过Thread类和Handler类实现的。Thread类用于创建和管理线程,而Handler类用于在不同线程之间传递和处理消息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值