Android高工:细说 Android 多线程,探究原理知其所以然

我告诉你,可以,都可以。

单线程的APP只包括Android的UI线程也是能运行的;一个APP多个进程也是可以达到的,实现方式涉及到Android的IPC机制,这里不细说。

1.2 为什么要使用多线程?

这里杠精可能会说,那你单线程也能跑,我为啥还要整多线程?

我告诉你,首先这句话从Android开发的角度来讲,近似于一个假命题。因为谷歌爸爸现在强制规定了不能在UI线程进行耗时操作,必须放到子线程里面去,除非你的程序不涉及耗时操作。究其原因,是因为在UI线程进行耗时操作的话,给用户的使用体验就是界面“卡顿”。同时,如果UI线程被阻塞超过一定时间会触发ANR(Application Not Responding)错误。

从底层的角度来讲,多线程可以使得整个环境能够异步执行,这有助于防止浪费CPU时钟周期从而提高效率。换言之,多线程能更充分的利用CPU资源,从而提高程序的运行效率。

二、那我怎么进行多线程编程?

==========================================================================

2.1 Thread类和Runnable接口 要想定义一个线程只需要新建一个类继承自Thread,然后重写父类的run方法即可

class MyThread extends Thread {

@Override

public void run() {

doSomething();

}

}

//在需要的时候启动线程

new MyThread().start();

优化一下?

我们可以没必要继承整个Thread类,只实现Runnable接口就好了

class MyThread implements Runnable {

@Override

public void run() {

doSomething()

}

}

//启动线程

MyThread myThread = new MyThread();

new Thread(myThread).start();

那我不想专门再写一个线程类怎么办?可以使用匿名类

new Thread(new Runnable() {

@Override

public void run() {

doSomething();

}

}).start();

2.2 线程池

  • 2.2.1 线程池的意义

既然我都会用Runnable接口来创建线程了,还要线程池干啥?其实不然,随意创建线程的操作在实际开发中是极为不推荐的。为啥?因为线程也是一种资源,反复的创建和销毁线程会带来一定性能上的额外开销。与其相比,线程池主要有以下几个优点:

  • 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销

  • 能有效控制线程池的最大并发数,避免大量的线程之间因相互抢占系统资源而导致的阻塞现象

  • 能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能

  • 2.2.2 线程池的结构和原理

一个完整的线程池应该有这么几个组成部分

  • 核心线程

  • 任务队列

  • 非核心线程

当我们通过线程池执行异步任务的时候,其实是依次进行了下面的流程

  1. 检查核心线程数是否到达最大值,否则创建新的核心线程执行任务,是则进行下一步</

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值