线程的死锁
如果多个线程操作多个对象互相请求,那么会引起死锁。
package deadlock;
public class SomeBody {
private String name;
private SomeBody other;
public SomeBody(String name)
{
this.name=name;
}
public synchronized void saySomeThing()
{
System.out.println(this.name+"1111111111"+Thread.currentThread());
//某个对象进入此锁后,休息一会,确保同时另外一个对象已经占有它自己的锁,
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
other.singSomeThing();//让另外一个对象请求它已经占有的锁
System.out.println(this.name+"222222222222"+Thread.currentThread());
System.out.println(this.name+"33333333333"+Thread.currentThread());
System.out.println(this.name+"44444444444"+Thread.currentThread());
}
public synchronized void singSomeThing()
{
System.out.println(this.name+"AAAAAAAAAAA"+Thread.currentThread());
System.out.println(this.name+"BBBBBBBBBBBBBB"+Thread.currentThread());
// 某个对象进入此锁后,休息一会,确保同时另外一个对象已经占有它自己的锁,
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
other.saySomeThing();//让另外一个对象请求它已经占有的锁
System.out.println(this.name+"CCCCCCCCCCCC"+Thread.currentThread());
System.out.println(this.name+"DDDDDDDDDDDDD"+Thread.currentThread());
}
public void setOther(SomeBody other)
{
this.other=other;
}
}
线程1:
ublic class xiaoming extends Thread{
private SomeBody somebody;
public xiaoming(SomeBody somebody)
{
this.somebody=somebody;
}
public void run()
{
somebody.saySomeThing();
}
}
线程2:
package deadlock;
public class dagang extends Thread{
private SomeBody somebody;
public dagang(SomeBody somebody)
{
this.somebody=somebody;
}
public void run()
{
somebody.singSomeThing();
}
}
程序入口:
package deadlock;
public class main {
public static void main(String args[])
{
SomeBody mingming=new SomeBody("小明");
SomeBody ganggang=new SomeBody("大刚");
mingming.setOther(ganggang);
ganggang.setOther(mingming);
Thread thread1=new xiaoming(mingming);
Thread thread2=new dagang(ganggang);
thread1.start();
thread2.start();
}
}
结果:
小明1111111111Thread[Thread-0,5,main]
大刚AAAAAAAAAAAThread[Thread-1,5,main]
大刚BBBBBBBBBBBBBBThread[Thread-1,5,main]