/**
* @author 杨宁
*死锁问题:
*创建两个线程或多个线程他们共享两个或多个同一个对象(一个对象就是一把锁)
*两个线程在执行时各自占用对方的对象锁,等待对方归还各自的所需的锁,从而进入一种僵持状态
*/
public class Sisuo {
public static void main(String[] args) {
One one = new One();
Two two = new Two();
Thread t1=new Thread(new A(one,two));
Thread t2=new Thread(new B(one,two));
t1.start();
t2.start();
}
}
class A implements Runnable{
One one;
Two two;
public A(One one, Two two) {
super();
this.one = one;
this.two = two;
}
@Override
public void run() {
//线程A占用锁one
synchronized (one) {
//为保证一定会出现死锁让其睡一秒钟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("A对象执行one");
//等待线程B将two锁归还
synchronized (two) {
System.out.println("A对象执行two");
}
}
}
}
class B implements Runnable{
One one;
Two two;
public B(One one, Two two) {
super();
this.one = one;
this.two = two;
}
@Override
public void run() {
//线程B占用锁two
synchronized (two) {
System.out.println("B对象执行two");
//等待线程A将one锁归还
synchronized (one) {
System.out.println("B对象执行one");
}
}
}
}
class One{
}
class Two{
}
java 多线程 实现死锁问题
最新推荐文章于 2022-12-02 21:17:08 发布