6.18Java死锁的产生与解决
死锁的简单描述
简单说就是在一个同步块中同时持有两个对象的锁
系统描述:
-
多个线程各自占有一些共享资源
-
互相等待其他线程占有的资源
满足以上两点就会导致两个或者多个线程都在等待对方释放资源,都停止执行的情况。
某一个同步块同时拥有"两个以上对象的锁"时,就会发生死锁问题--->过多的同步可能会造成死锁
实例demo
package iostudy.synchro;
/**
* 死锁:过多的同步导致线程相互不释放共享资源
* 从而相互等待。一般发生于同步中持有多个对象的锁
* @since JDK 1.8
* @date 2021/6/18
* @author Lucifer
*/
public class DeadLock {
public static void main(String[] args) {
/*创建两个线程*/
Markup markup1 = new Markup(1, "Lucifer");
Markup markup2 = new Markup(2, "James");
markup1.start();
markup2.start();
}
}
/**
* 创建一个口红类
*/
class Lipstick{
}
/**
* 创建一个镜子类
*/
class Mirror{
}
/**
* 一个线程类--->化妆
*/
class Markup extends Thread{
/*静态资源类对象*/
static Lipstick lipstick = new Lipstick(); //静态的无论创建几个对象都是一份属性
static Mirror mirror = new Mirror();
/*选择镜子还是口红--->0是镜子,1是口红*/
int choice;
/*名字*/
String girl;
/*构造器*/
public Markup(int choice, String girl){
this.choice = choice;
this.girl = girl;
}
/*重写Thread类下的run方法*/