死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
代码如下
运行结果
很显然,一线程拿到了锁A,然后二线程拿到了锁B。现在一线程想要锁B,而二线程想要锁A。他们俩就会陷入无限的等待。
代码如下
- package com.liuyanzhao;
- /*
- *
- * @author Yanzh
- *
- */
- class Test implements Runnable {
- static Object lockA = new Object();
- static Object lockB = new Object();
- private boolean flag;
- public Test(boolean flag) {
- this.flag = flag;
- }
- @Override
- public void run() {
- if(flag) {
- synchronized (lockA) {
- System.out.println(Thread.currentThread().getName()+" if lockA");
- synchronized (lockB) {
- System.out.println(Thread.currentThread().getName()+" if lockB");
- }
- }
- } else {
- synchronized (lockB) {
- System.out.println(Thread.currentThread().getName()+" else lockB");
- synchronized (lockA) {
- System.out.println(Thread.currentThread().getName()+" else lockA");
- }
- }
- }
- }
- }
- public class DeadLockDemo {
- public static void main(String[] args) {
- new Thread(new Test(true)).start();;
- new Thread(new Test(false)).start();;
- }
- }
运行结果
很显然,一线程拿到了锁A,然后二线程拿到了锁B。现在一线程想要锁B,而二线程想要锁A。他们俩就会陷入无限的等待。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏