Android笔记--关于Android多线程-01

在这里插入图片描述

什么是线程?

  • 线程是一个基本的CPU执行单元&程序执行流的最小单眼,它是比进程更小的可独立运行的可独立运行的基本单位,==>轻量级进程;
  • 组成:线程ID + 程序计数器 + 寄存器集合 + 堆栈;
  • 线程自己不拥有系统资源,与其他线程共享进程所拥有的全部资源。
  • 线程的作用:是减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
  • 线程的基本状态:就绪、阻塞、运行3种基本状态
    在这里插入图片描述
    在这里插入图片描述

注意 就绪、阻塞状态的区别:

就绪状态:进程缺少的资源 = 处理机,只要获得处理机资源立即执行 等待状态:指 进程缺少其他资源(除了处理机) / 等待某一事件

线程分类

线程主要分为:守护线程、非守护线程(用户线程);
上面两种线程的区别:看虚拟机是否已退出;当所有用户线程结束时,因为没有守护的必要,所以守护线程也会终止,虚拟机也同样退出; 反过来,只要任何用户线程还在运行,守护线程就不会终止,虚拟机就不会退出
守护线程:守护用户线程的线程,即在程序运行时为其他线程提供一种通用服务,如垃圾回收线程。thread.setDaemon(true);
非守护线程:主线程/子线程;
在Android里,主线程指的是UI线程,Android系统在程序启动时自己启动的一条主线程,处理四大组成与用户进行交互的事件,如更新UI数据等;而子线程又称为工作线程,主要用于耗时的操作(网络请求,I/O操作,数据库操作等)。
线程优先级:默认是5,最高是10;Thread.NORM_PRIORITY,通过方法setPriority(int grade)设置;

多线程

多线程指的是多个线程同时进行,即多个任务同时进行;(但其实计算机在任何时刻都只能执行一个任务,多线程只是一个人的错觉,只是因为JVM快速调度资源来轮换线程,使得线程不断轮流执行,所以看起来好像在同时执行多个任务而已)。

Android官方声明:在多线程编程时有两大原则:

  • 不能阻塞UI线程(即主线程):单线程会导致主线程阻塞,然后出现ANR错误:主线程被阻塞超过5s则会出现错误
  • 不要在UI线程之外更新UI组件

所以,我们在日常开发中需要(一个主线程和n个工作线程)来解决问题。将耗时任务从主线程抛到工作线程中进行,将更新UI组件任务从工作线程抛到主线程中进行

线程调度(关于其他调度方式可以去看关于操作系统的书)

  • 当系统存在大量线程时,系统会通过时间片轮转的方式调度线程;
  • 处于就绪状态(Runnable)的线程都会进入到线程队列中等待CPU资源;
  • 在采用时间片的系统中,每个线程获得CPU的资源的机会都是均等的;当线程使用CPU资源的时间到后,不管线程有没有完成自己的全部操作,JVM也会中断当前线程的执行,把CPU资源的使用权切换给下一个队列中等待的线程。被中断的线程将等待CPU资源的下一次青睐,然后从上一次的中断处继续执行。
  • 线程调度也和优先级有关,优先级高知识获得青睐的机会大一点,而不是霸占。

关于线程同步 Synchronized

[https://www.jianshu.com/p/2ed498b43628]

作者:Carson_Ho
参考文章:[Carson_Ho:https://carsonho.blog.csdn.net/article/details/90690840]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值