死磕java多线程

一、线程的【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

六、并发编程的三个重要特性:原子性、可见性、有序性!

相关文章
相关标签/搜索