死锁是指两个或两个以上的进程在执行过程当中,因为竞争资源或者因为彼此通讯而形成的一种阻塞的现象,若无外力做用,它们都将没法推动下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。this
互斥是指至少存在一个资源为共享资源,每次只能被一个进程访问,不能同时被用在多处地方code
占有且等待是指进程拥有着一个资源的同时也在等待着另一个资源进程
非抢占是指该资源只能被占有它的进程显式释放,不能被其余进程强行占有资源
循环等待是指每一个进程占有的资源都被其余进程所须要着,好比存在三个进程A、B、C,他们三个同时占有一种资源,也同时等待着一种资源,A所等待的资源被B占有,B所等待的资源被C占有,C所等待的资源被A占有,这样就造成了一个环路,称之为循环等待get
public class DeadLockDemo { public static void main(String[] args) { Print p1 = new Print("p1"); Print p2 = new Print("p2"); Thread t1 = new Thread(() -> { synchronized(p1) { try { Thread.sleep(2000); p1.print(); } catch(Exception e) {} synchronized(p2) { p2.print(); } } }); Thread t2 = new Thread(() -> { synchronized(p2) { try { Thread.sleep(2000); p2.print(); } catch(Exception e) {} synchronized(p1) { p1.print(); } } }); t1.start(); t2.start(); } } class Print { private String name; Print(String name) { this.name = name; } public String getName() { return this.name; } public void print() { System.out.println(Thread.currentThread().getName() + " " + this.getName() + " print..."); } }