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

学习目的

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

学习过程

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

技术

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(多线程))