黑马程序员 多线程死锁的问题.

来源:互联网 发布:生成对抗网络 论文 编辑:程序博客网 时间:2024/05/21 18:32

-----------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学习型技术博客、期待与您交流! ------------...

0 0
原创粉丝点击