android多线程的使用(未完待续)

一、基本使用

1、继承Thread类
2、实现Runnable接口
3、Handler

1、继承Thread类

①定义:Theard类是java实现多线程的具体类

②作用:实现多线程

③特点

  • 优点 :实现简单,只继承了Thread类和复写run()就可以实现多线程的操作

  • 缺点:
    1、局限性大。因为必须要继承Thread类,而java是单继承,即继承了Thread就不能继承别的类了
    2、不适合资源的共享。1个线程就是一个实例对象,相对独立,无法进行资源共享
    3、消耗资源。
    Thread线程 = 一次性消费品; 一个线程=一个耗时任务,当执行完一个耗时任务后,线程就会被自动销毁,所以有100个耗时任务就必须有100个线程; 多次创建和销毁线程比较消耗系统资源

④使用:1、先创建线程类(继承自Thread)——> 重写run方法(即里面写该线程具体要做什么事情)——> 创建线程对象(即实例化线程类)——>通过线程的对象控制线程的状态(开启和停止)

方法一:基本用法

	// 步骤1:创建线程类 (继承自Thread类)
   class MyThread extends Thread{

	// 步骤2:复写run(),内容 = 定义线程行为
    @Override
    public void run(){
    ... // 定义的线程行为
    }
}

	// 步骤3:创建线程对象,即 实例化线程类
  MyThread mt=new MyThread(“线程名称”);

	// 步骤4:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起  / 停止
	// 此处采用 start()开启线程
  mt.start();

方法二:使用匿名类

// 步骤1:采用匿名类,直接 创建 线程类的实例
 new Thread("线程名称") {
                 // 步骤2:复写run(),内容 = 定义线程行为
                    @Override
                    public void run() {       
                  // 步骤3:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起  / 停止   
                      }.start();

上述两种方式各有优缺点:
在这里插入图片描述
⑤实际应用

2、实现Runnable接口

在这里插入图片描述

接下来开始是对Runnable接口的简单理解:

①定义:它是与多线程相关的抽象接口,其中仅定义了一个run()方法。

②作用:实现多线程。

③特点:优点:
1、适合资源的共享。Runnable的代码可以被多个线程(Thread实例)共享,适用于多个线程处理同一个资源。
2、较为灵活。一个类可以实现多个接口,避免了继承Thread类方式所导致的单继承的局限性。

④使用:创建线程辅助类(实现Runnable接口)——> 重写run()(定义线程的具体作用)——> 创建线程辅助对象(即实例化线程辅助类)——>创建线程对象 (即实例化线程类,线程类 = Thread类,创建时传入线程辅助对象)——> 通过线程对象控制线程的状态

特别注意:

  • Java中真正能创建新线程的只有Thread类对象
  • 通过实现Runnable的方式,最终还是通过Thread类对象来创建线程
  • 所以对于实现了Runnable接口的类,称为 线程辅助类;Thread类才是真正的线程类

方法一:基本用法

	// 步骤1:创建线程辅助类,实现Runnable接口
 class MyThread implements Runnable{
    ....
    @Override
	// 步骤2:复写run(),定义线程行为
    public void run(){

    }
}

	// 步骤3:创建线程辅助对象,即 实例化 线程辅助类
  MyThread mt=new MyThread();

	// 步骤4:创建线程对象,即 实例化线程类;线程类 = Thread类;
	// 创建时通过Thread类的构造函数传入线程辅助类对象
	// 原因:Runnable接口并没有任何对线程的支持,我们必须创建线程类(Thread类)的实例,从Thread类的一个实例内部运行
  Thread td=new Thread(mt);

	// 步骤5:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起  / 停止
	// 当调用start()方法时,线程对象会自动回调线程辅助类对象的run(),从而实现线程操作
  td.start();

方法二:使用匿名类

// 步骤1:采用匿名类,直接 创建 线程类的实例
   // 步骤1:通过匿名类 直接 创建线程辅助对象,即 实例化 线程辅助类
    Runnable mt = new Runnable() {
                    // 步骤2:复写run(),定义线程行为
                    @Override
                    public void run() {
                    }
                };

                // 步骤3:创建线程对象,即 实例化线程类;线程类 = Thread类;
                Thread mt1 = new Thread(mt, "窗口1");
           
                // 步骤4:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起  / 停止
                mt1.start();

上述两种方式各有优缺点:
在这里插入图片描述
⑤实际应用

3、Handler

二、复合使用

AsyncTask
HandlerThread
IntentService

三、线程池

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值