Android多线程实现的几种方式_安卓多线程

本文详细介绍了Android中实现多线程的多种方式,包括实现Runnable接口、匿名实现、Handler.sendMessage()和Handler.post()。重点讨论了Handler在多线程通信和消息处理中的重要作用,以及如何通过Handler进行线程间的消息传递和UI操作。同时,文章提到了线程间通信的重要性,并鼓励读者系统学习和深入研究相关知识。
new Thread(){
    @Override
    public void run() {
        super.run();
        System.out.println("我是Thread的匿名实现");
    }
}.start();

直接采用匿名类的方式创建然后复写run方法即可实现简单方便快捷,缺点,每次实现都需要重新编写run方法。

常规方式即继承Thread和匿名Thread实现的对比

3.3实现Runnable接口

public class MyThreadRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("线程名字:"+this.getClass().getName()+"---"+i);
    }
}

编写MyThreadRunnable并实现Runnable接口,然后复写run方法即可实现。

虽然这里是通过实现Runnable接口实现多线程,但是实现Runnable的方式,最终还是通过Thread类对象来创建线程,即实现了Runnable接口的类,称为线程辅助类Thread类才是真正的线程类

3.4Runnable匿名实现

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("我是匿名Runnable");
    }
};
Thread thread = new Thread(runnable);
thread.start();

首先创建Runnable的实例,然后创建Thread的实例并把runnable当做参数传入最后调用thread.start方法即可使用。

常规实现即用Runnable接口和匿名实现的对比如下

下面是继承Thread类和实现Runnable接口的对比

3.5Handler.sendMessage()

Handler的介绍

上面应该是比较常见的两种实现多线程的方式,而这里是通过Handle来实现的,可能有人会问,为什么android多线程的需要handle?handle有什么作用?其实handle大有作为了,它不仅可以作为信息传递的媒介和好帮手,同时也是多线程的一把好手。

在 Android 中,多线程编程通常涉及到线程之间的通信和消息传递。Handler 是 Android 提供的一个机制,用于线程之间的消息传递和处理。

以下是 Handler 的几个主要作用:

  1. 线程间通信:在多线程编程中,我们可能需要在一个线程中触发另一个线程执行某些任务。通过 Handler,我们可以发送消息或者 post Runnable 到目标线程的消息队列中,从而实现线程间的通信。
  2. 消息处理:Handler 可以用来接收和处理消息。当有消息到达线程的消息队列时,Handler 会将消息取出并根据需要进行处理。这样可以方便地在特定的线程中执行相应操作,例如更新 UI、执行耗时操作等。
  3. 定时任务:Handler 可以与定时器 Timer 结合使用,实现定时任务。通过发送延迟消息或周期性消息,我们可以在指定的时间间隔内执行特定的任务,从而实现定时功能。
  4. 主线程操作:在 Android 中,UI 操作必须在主线程(UI 线程)上执行。通过在主线程中创建 Handler,并将其与 Looper 关联,就可以在其他线程中发送消息到主线程的消息队列中,从而实现在主线程上执行操作,例如更新 UI 界面。

总之,Handler 在 Android 多线程编程中起着关键的作用,它提供了一种安全、方便的线程间通信和消息处理机制,使得在多线程环境下更容易实现任务调度和UI操作。

有关Handler的相关基本调用说明

public class MyHandle extends Handler{
    @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        System.out.println(msg);
    }
}
myHandle = new MyHandle();
Message message = Message.obtain();
message.what=1;
message.obj = "我是Handle的Obj";
myHandle.sendMessage(message);

msg.what 消息标识

msg.obj 消息内容存放

这里是对Handler类的继承然后复写handleMessage方法来实现的。通过实例化MyHandle类并实例化Message,然后设置message中传递信息的内容以及消息的标识,最后调用sendMessage发送消息。

当然,上面都有匿名实现,handler也是有的。

private Handler handler = new Handler(){
    @Override
    public boolean sendMessageAtTime(@NonNull Message msg, long uptimeMillis) {
        return super.sendMessageAtTime(msg, uptimeMillis);
    }
};

Message message = Message.obtain();

message.what=1;

message.obj = “内容填写”;

handle.sendMessage(message);

3.6Handler.post()

myHandle.post(new MyRunnable(){
    @Override
    public void run() {
        super.run();
        System.out.println("Handle.post的使用方法");
    }
});

这里和上面一样需要实例化一个Handler,当然你会说,都需要通过继承handler实现,那这二者是不是不一样呢?其实看过源码你会发现,二者还是有区别的,在底层会检查你是通过sendmessage方法实现的还是通过post实现的,根据你实现的方式会去调用不一样的方法来实现的。

最后

目前已经更新的部分资料:



网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值