Java多线程面试题

2022-10-21 11:28:36

1、sleep( ) 和 wait( ) 的区别?

sleep 方法: 是 Thread 类的静态方法,当前线程将睡眠 n 毫秒,线程进入阻塞状态。当睡眠时间到了,会解除阻塞,进行可运行状态,等待 CPU 的到来。睡眠不释放锁(如果有的话);

wait 方法: 是 Object 的方法,必须与 synchronized 关键字一起使用,线程进入阻塞状态,当 notify 或者 notifyall 被调用后,会解除阻塞。但是,只有重新占用互斥锁之后才会进入可运行状态。睡眠时,释放互斥锁。

2、synchronized 关键字?

底层实现:

进入时,执行 monitorenter,将计数器 +1,释放锁 monitorexit 时,计数器-1;

当一个线程判断到计数器为 0 时,则当前锁空闲,可以占用;反之,当前线程进入等待状态。

含义:(monitor 机制)

Synchronized 是在加锁,加对象锁。对象锁是一种重量锁(monitor),synchronized 的锁机制会根据线程竞争情况在运行时会有偏向锁(单一线程)、轻量锁(多个线程访问 synchronized 区域)、对象锁(重量锁,多个线程存在竞争的情况)、自旋锁等。

该关键字是一个几种锁的封装。

3、volatile 关键字ÿ

  • 作者:南方淮竹
  • 原文链接:https://blog.csdn.net/weixin_48272905/article/details/109274687
    更新时间:2022-10-21 11:28:36