-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------...
/*
* 多线程死锁的问题,
*
* 什么叫做死锁呢?
* 我是这样理解的,就是打不开的锁,那么在程序中有打不开的锁的话,那么程序就
* 没有办法继续往下执行,可以在样更形象化的说一下就是好比我们去吃饭,那么我们
* 要吃饭,老板先要钱,我就要先吃饭,那么我们就在那争执到最后就不会有结果的
*
* 那么在多线程中的死锁是怎么来体现的呢?
* 就是两条线程用的不是同一把锁,你中有我我中有你.
*
* 死锁示例代码如下.
*/
//这是一个测试用的类.
public class ThreadDemo {
public static void main(String[] args) {
Thread t= new Thread(new Demo4(true));
Thread t1= new Thread(new Demo4(false));
t.start();
t1.start();
}
}
//这是先定义一个类,实现了Runnable接口 复写了其中的run 方法.
class Demo4 implements Runnable{
private boolean flag;
Demo4(boolean flag){
this.flag = flag;
}
public void run(){
//这是做得一个标记.那么下面代码就实现了,锁中有锁的这样一个要求.
if(flag){
while(true){
//下面就是两个同步代码块嵌套的方式.
synchronized(Lock.obj1){//这是一个锁.
System.out.println("if flag");
synchronized(Lock.obj2){//这是另外一个锁
System.out.println("if flag");
}
}
}
} else{
while(true){
//下面就是两个同步代码块嵌套的方式.
synchronized(Lock.obj2){//这是一个锁
System.out.println("else flag");
synchronized(Lock.obj1){//这是另外一个锁.
System.out.println("else flag");
}
}
}
}
}
}
//为了更好的体现两个不同的锁在嵌套的时候会出现死锁的问题
//这是先在外面定义好的两个不同的锁,两个不同的锁.为了用的方便加上了静态修饰.
class Lock{
static Object obj1 = new Object();
static Object obj2 = new Object();
}
机器不同可能出现的效果不是一样的
-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------...