美文网首页
Android开发学习——Day17(多线程)

Android开发学习——Day17(多线程)

作者: 明天_ff | 来源:发表于2019-08-18 21:38 被阅读0次

    学习目的

    学习多线程的概念,用法及其意义。

    学习过程

    通过对知识点概念的琢磨和理解,深入领会多线程的意义所在,并经过一定练习,掌握对其的应用。

    技术

    1.基础概念

    1)进程:正在运行的一个程序,例如:QQ IDE 浏览器;系统会为这个进程分配独立的内存资源

    2)线程:具体执行任务的最小单位

    Tips:

    1>显示界面 -> UI主线程

    2>一个进程最少拥有一个线程(主线程——运行起来就执行的线程)

    3>线程之间是共享内存资源的(进程申请的)

    4>线程之间可以通信(数据传递:多数为主线程和子线程)

    5>每一个线程都有自己的运行回路(生命周期)

    3)线程的生命周期/状态

    初始(NEW):新建一个线程的对象,还未调用start方法

    运行(RUNNABLE):准备就绪的线程会被放在线程池中等待被调用

    阻塞(BLOCKED):由于某种原因暂时的停止了运行,直到线程进入准备就绪(Ready)状态才会有机会转到运行状态

    等待(WAITING):该状态的线程需要等待其他线程做出一些特定的动作(通知或者是中断)

    超时等待(TIME_WAITING):该状态和上面的等待不同,它可以在指定的时间内自行返回

    终止(TERMINATED):线程任务执行完毕

    4)创建子线程的意义所在:为了避免某个占用较大资源的任务阻塞主线程的运行,使程序更加流畅

    2.一些方法

    join():让当前这个线程阻塞 等join的线程执行完毕再执行

    setName():设置线程名称

    getName():获取线程名称

    currentThread():获取当前运行的线程对象

    start():开启任务

    3.线程安全:

    线程安全简略

    简单的两个栗子:

    1.实战项目——模拟航班售票系统:在北京、上海、重庆三座城市出售十张飞机票

    我们先来看看效果:

    实现效果--模拟航班售票系统

    由效果可知,十张机票由三地机场共同售出。

    具体代码如下:

    代码实现--模拟航班售票系统

    整个的代码核心在于:如何使十张票被三地共同售出。

    实现方式为:定义一个线程任务,以三个线程来操作这个任务,保证线程操作的是共同的一个数据;用synchronized(obj)上锁,避免线程在执行售票操作时被其他线程打断,影响实现。

    2.实战项目——模拟交替售票:北京、重庆两地交替售出十张机票

    看看效果:

    实现效果--模拟交替售票

    具体代码如下:

    代码实现--模拟交替售票

    注意:实现“交替”效果需要用到wait()和notify()方法,而且需要先用notify()唤醒另一个线程,再使当前线程等待,否则会出现“死锁”现象。

    感悟

    多线程的存在,使得程序有可以更好的用户体验,是一种很妙的思想方法,其基本方法也比较简单。要想学习学得好,我觉得就是——“无它,唯手熟尔!”

    相关文章

      网友评论

          本文标题:Android开发学习——Day17(多线程)

          本文链接:https://www.haomeiwen.com/subject/aicdsctx.html