您的位置:首页 > 编程语言 > Java开发

Java 死锁的例子

2016-07-26 20:07 459 查看
《并发的挑战》学习标注

多线程是我觉得初入JAVA中的一个难点,之前一直知道线程有阻塞死锁的状态,但是很抽象,但是真的让我自己写一个死锁的例子,我还真的有点下笔难的感觉,今天看到这本书的第一章,就学习到了一个简单的线程死锁例子,在这里分享出来:

public class DeadLockDemo {
private static String A = "A";
private static String B = "B";
public static void main(String[] args){
new DeadLockDemo().deadLock();;
}
private void deadLock(){
Thread t1=new Thread(new Runnable() {
public void run() {
synchronized (A) {
try {
System.out.println("A1");
Thread.currentThread().sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
synchronized (B) {
System.out.println("B1");
}
}
}
});
Thread t2=new Thread(new Runnable() {
public void run() {
synchronized (B) {
System.out.println("B2");
synchronized (A) {
System.out.println("A2");
}
}
}
});
t1.start();
t2.start();
}
}


运行之后可以看到输出结果为:

A1
B2

可以看到输出的结果是A1,B2说明两个线程都开始启动了。并且都进入了一开始的synchronized方法,然后由于方法1锁住了A,方法2锁住了B,导致第二段代码再去获取对方的对象String的锁的时候失败,所以可以看到synchronized的作用,是锁住传入进来的当前对象,传的是什么,就锁什么。如果传的是对象的.class,那么就锁住整个类,也是单例模式的很好的例子。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: