2019-08-18
多线程
1、进程:正在运行的程序 ( QQ IDE 浏览器 )
系统会为这个进程分配独立的内存资源(申请内存资源)
2、线程:具体执行任务的最小单位
一个进程最少拥有一个线程(主线程 运行起来就执行的线程)
显示界面的一般称为UI主线程
线程之间共享内存资源(进程申请的)
线程之间可以通信(数据传递:多为主线程和子线程)
每一个线程都有自己的运行回路(生命周期)
3、线程的生命周期:
NEW:新建
RUNABLE:run runable 就绪状态,只要抢到时间片就可以运行
BLOCKED:阻塞状态 sleep wait
TIMED_WAITING
TERMINAED:终止
4、为什么需要创建子线程
如果在主线程中存在比较耗时的任务,阻塞了主线程,要等任务执行完毕才可以执行后面的,用户体验差
为了不阻塞主线程,需要将耗时的任务放在子线程中处理
5、如何创建一个子线程
(1)协议类继承于 Thread 实现 run 方法
join:让当前这个线程阻塞,等join执行完毕再执行
setName:设置线程名称
getName:获取线程名称
currentThread:获取当前运行的线程对象
start:开始任务
6、接口,抽象方法
创建一个任务:创建一个类实现Runnable接口
使用Thread操作这个任务
7、实现Runnable解救,实现run方法
创建任务:创建类实现Runnable接口
使用Thread:为这个任务分配线程
开启任务:start
8、线程安全(火车票)
火车票有多个平台但都是同一个系统
synchronized Lock 加锁解锁
synchronized 同步监听器,需要一把锁
任何对象都有自己的一把锁
如果多个线程操作同一个代码块,并且需要同步,那么必须操作同一个对象即同一把锁
(1)synchronized(监听器/对象/锁){
需要同步代码块
}
(2)同步方法:同步监听器是当前对象本身
必须确保多个对象调用的同步方法操作一个对象
本质是同步代码块
9、(1)如何创建一个线程 Thread Runable
(2)线程的同步 synchronized ReentrantLock
(3)主线程和子线程之间使用接口回调数据
(4)线程间的通信:synchronized (wait notifi notifiall)
ReentrantLock
Condition c = lock.newCondition()
await single singleall
感悟
任何时候都不能放松学习,被你抛弃的迟早会抛弃你