一、线程的【5种】状态:NEW/RUNNABLE/RUNNING/BLOCKED/TERMINATED编程
二、建立对象的三种方式:多线程
1)实现Runnable的接口并发
2) 继承Thread类线程
3)calleble和Future结合(实现业务拆分多线程的合并)对象
三、如何运行一个线程:继承
start/notify/notifyall接口
如何关闭一个线程资源
stop(不推荐了)/interrupt中断信号/volatile修饰标志位!同步
二、关键字和API:it
yield方法是的RUNNING进入RUNNABLE的状态:但不是blocke状态,仅能使一个线程从运行状态转到可运行状态,而不是等待或阻塞状态.
start/notify/notifyAll/获取锁资源.使得进入RUNNABLE状态,等待CPU资源的到来!
Thread方法的sleep/Object的wait方法进入了BLOCKED状态
线程获取了CPU资源以后进入RUNNING状态
stop可使线程进入TERMINATED可是不推荐!
join方法让两个线程能够串行,Bjoin到A中,B先阻塞,保证B线程在A线程以后执行!!能够把多个线程串联起来合并相似于 “串行” 编程方式!
三、为何不推荐使用stop方法让线程进入TERMINATED了,有没有更优雅的方式停掉一个线程?
Two-Phase Termination(两步终止)的模式能够优雅的终止线程,这种模式采用了两个步骤来终止线程,因此叫两步终止模式
四、wait和sleep的区别
1.wait是Object的方法,线程执行此方法以后,会释放对象锁
2.sleep是Thread对象的方法,执行后,线程睡眠,但不会释放对象锁!!
五、锁的几个关键字
1)synchronized:同步方法和代码块,获取了与mutex关联的monitor锁(monitor enter + moniter exit)!
2)volatile:轻量级锁!只能修饰变量和实例变量!其实不能叫锁,他只是保证多线程共享变量(static)的修改可以当即体现!保证线程的可见性!
3)显示LOCK锁!:能够知道锁的时间长短!
锁的分类:
悲观锁:悲观锁认为对于同一个数据的并发操做,必定会发生修改的,哪怕没有修改,也会认为修改。所以对同一个数据的并发操做,悲观锁采起加锁的形式。
乐观锁:乐观的认为,不加锁的并发操做是没有事情的。
排它锁:本身可读写、其余人读写都不行: lock in share mode
共享锁:本身可读写,其余人只能够读!...for update
六、并发编程的三个重要特性:原子性、可见性、有序性!