多线程面试重点

一.线程状态

1.start

..

2.stop

..

3.wait

..

4.notify/notifyAll

..

5.sleep

..

6.interrupt

..

7.join

..

8.yield

..

面试题:

1.sleep是否会释放锁

2.wait是否会释放锁,wait是否必须要要在synchronized的代码块中

3.notify是否会释放锁,何时释放锁

4.wait与notifyAll搭配使用的规范是什么?

5.stop执行是否安全,要如何安全的退出线程

6.wait和sleep的区别

7.线程各个状态是如何切换的(比如调用start()从初始状态->就绪状态   wait() 运行中状态 -> 等待状态)

8.线程1 线程2 线程3 需要按顺序先后执行,如何做到?(join)

二、线程同步

1.synchronized

使用

方法 (静态方法、普通方法)

静态方法:是对class对象加锁,所以任何以这个class对象创建出来的实例,在执行次方法时,都需要竞争锁

普通方法:是对普通对象加锁,所以不同实例,调用此方法时不需要竞争锁

代码块

对某个代码块进行加锁,括号内是同一个对象的都需要竞争锁

原理

方法:在方法前面会添加ACC_SYNCHRONIZED标识符

代码块:在代码块前后会添加 monitor_enter 和 monitor_exit标识符

锁升级的过程

无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁

JVM的优化

1.锁升级

2.适应性自旋锁

3.锁消除

4.锁合并

对象头

/..

volatile

/..

面试题:

1.synchronized用在普通方法和静态方法有什么区别?

2.int 和 Integer类型是否可以作为syn()里面的参数,为什么

3.JVM1.8针对synchronized关键字做了哪些优化

4.synchronized实现的原理是什么

5.volatile的三大特性是什么,他能否保住线程安全

6.双重检查锁中,为何要检查两次,为何要使用volatile关键字

2.Lock

使用

1.公平锁

/..

2.非公平锁

/..

3.读写锁

/..

实现原理

1.CAS

/.. 三大问题,如何解决

2.CLH

/..

3.AQS

/.. 使用了什么设计模式,如何实现可重入,线程同步的原理是什么

面试题:

1.什么时候使用synchronized,什么时候用ReentrantLock

2.synchronized与ReentrantLock是否是可重入的,什么是可重入

3.synchronized实现原理是什么,锁升级过程是什么,jvm做了哪些优化

4.ReentrantLock实现原理是什么

5.ConcurrentHashMap是如何实现线程安全的,如何做到性能最佳,jdk1.8的前后有什么区别

 

三、阻塞队列

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值