死锁
package 多线程;
import java.util.concurrent.TimeUnit;
//多线程------死锁
//同步本质:一个线程等待另一个线程执行完毕后才执行
// 死锁:几个线程共享有限资源且几个相关的线程彼此之间相互等待着释放对方占有自己的资源,会造成死锁
/**
* 电脑类需要电脑 鼠标类需要鼠标
* 电脑鼠标各有一个
* 二者互相占用资源
*/
class Computer{
public synchronized void needComputer(Mouse mouse){
System.out.println("我占有鼠标,需要电脑");
try {
TimeUnit.SECONDS.sleep(2);
}catch (Exception e){
e.printStackTrace();
}
mouse.test();
}
public synchronized void test(){
System.out.println("急用电脑");
}
}
class Mouse{
public synchronized void needMouse(Computer computer){
System.out.println("我占有电脑,需要鼠标");
try {
TimeUnit.SECONDS.sleep(2);
}catch (Exception e){
e.printStackTrace();
}
computer.test();
}
public synchronized void test(){
System.out.println("急用鼠标");
}
}
public class DieSynchronized2 implements Runnable{
public static Computer computer=new Computer();
public static Mouse mouse=new Mouse();
public static void main(String args[]){
new DieSynchronized2();
}
public DieSynchronized2(){
//二者占用同一个资源
new Thread(this).start();//新线程
computer.needComputer(mouse);//主线程
}
@Override
public void run() {
mouse.needMouse(computer);
}
}