死磕java_死磕java多线程 - BobwithB的个人空间 - OSCHINA - 中文开源技术交流社区

1、线程的【5种】状态:NEW/RUNNABLE/RUNNING/BLOCKED/TERMINATED

2、创建对象的三种方式:

1)实现Runnable的接口

2) 继承Thread类

3)calleble和Future结合(实现业务拆分多线程的合并)

3、如何运行一个线程:

start/notify/notifyall

如何关闭一个线程

stop(不推荐了)/interrupt中断信号/volatile修饰标志位!

2、关键字和API:

yield方法是的RUNNING进入RUNNABLE的状态:但不是blocke状态,仅能使一个线程从运行状态转到可运行状态,而不是等待或阻塞状态.

start/notify/notifyAll/获取锁资源.使得进入RUNNABLE状态,等待CPU资源的到来!

Thread方法的sleep/Object的wait方法进入了BLOCKED状态

线程获取了CPU资源之后进入RUNNING状态

stop可以使线程进入TERMINATED但是不推荐!

join方法让两个线程可以串行,Bjoin到A中,B先阻塞,保证B线程在A线程之后执行!!可以把多个线程串联起来合并类似于  “串行” 编程方式!

3、为什么不推荐使用stop方法让线程进入TERMINATED了,有没有更优雅的方式停掉一个线程?

Two-Phase Termination(两步终止)的模式可以优雅的终止线程,这种模式采用了两个步骤来终止线程,所以叫两步终止模式

4、wait和sleep的区别

1.wait是Object的方法,线程执行此方法之后,会释放对象锁

2.sleep是Thread对象的方法,执行后,线程睡眠,但不会释放对象锁!!

5、锁的几个关键字

1)synchronized:同步方法和代码块,获取了与mutex关联的monitor锁(monitor enter + moniter exit)!

2)volatile:轻量级锁!只能修饰变量和实例变量!其实不能叫锁,他只是保证多线程共享变量(static)的修改能够立即体现!保证线程的可见性!

3)显示LOCK锁!:可以知道锁的时间长短!

锁的分类:

悲观锁:悲观锁认为对于同一个数据的并发操作,一定会发生修改的,哪怕没有修改,也会认为修改。因此对同一个数据的并发操作,悲观锁采取加锁的形式。

乐观锁:乐观的认为,不加锁的并发操作是没有事情的。

排它锁:自己可读写、其他人读写都不行: lock in share mode

共享锁:自己可读写,其他人只可以读!...for update

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值