JVM15-经典面试题之死锁-经典面试题之线程状态
线程死锁是什么?怎么模拟一个线程死锁?怎么用jstack定位到线程死锁
- 线程死锁是什么?
* 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行
- 死锁的模拟过程,代码模拟死锁
public class CPULockTest { private static Object lock1 = new Object(); private static Object lock2 = new Object(); public static void main(String[] args) { new Thread(()->{ synchronized (lock1){ try { System.out.println(Thread.currentThread().getName()+"得到lock1"); Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock2){ System.out.println(Thread.currentThread().getName()+"得到lock2"); } } },"线程1").start(); new Thread(()->{ synchronized (lock2){ try { System.out.println(Thread.currentThread().getName()+"得到lock2"); Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock1){ System.out.println(Thread.currentThread().getName()+"得到lock1"); } } },"线程2").start(); } }
-怎么用jstack定位到线程死锁


线程状态有哪些?他们之间是怎么切换的
- 线程状态分类
- NEW
- RUNNABLE
- BLOCKED 一个正在阻塞等待一个监视器的线程
如上例子就是blocked状态

- WAITING 一个正在无限期等待另一个线程执行一个特别的动作的线程
- TIMED_WAITING 一个正在限时等待另一个线程执行一个动作的线程
- TERMINATED 线程结束
* Blocked状态与Waiting状态的区别
* WAITING 状态属于主动地显式地申请的阻塞,BLOCKED 则属于被动的阻塞


浙公网安备 33010602011771号