学习目的
学习多线程的概念,用法及其意义。
学习过程
通过对知识点概念的琢磨和理解,深入领会多线程的意义所在,并经过一定练习,掌握对其的应用。
技术
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()唤醒另一个线程,再使当前线程等待,否则会出现“死锁”现象。
感悟
多线程的存在,使得程序有可以更好的用户体验,是一种很妙的思想方法,其基本方法也比较简单。要想学习学得好,我觉得就是——“无它,唯手熟尔!”
网友评论