A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hxwo211314 中级黑马   /  2014-7-8 23:14  /  1516 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

死锁是什么样的?

5 个回复

倒序浏览
就是两个线程, 你拿着我的锁不给我, 我拿着你的索不给你, 这样咱们都别开门了
回复 使用道具 举报
所谓死锁: 是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。
回复 使用道具 举报
互相争夺资源   导致两者都进行不下去
回复 使用道具 举报
本帖最后由 lancerjs 于 2014-7-9 16:21 编辑
  1. /*
  2. * 死锁: 多个线程之间,相互访问
  3. */
  4. public class LockDemo {
  5.         public static void main(String[] args) {
  6.                 //创建2个线程对象
  7.                 MyLock m1 = new MyLock();
  8.                 MyLock m2 = new MyLock();
  9.                
  10.                 //启动线程
  11.                 m1.start();
  12.                 m2.start();
  13.         }
  14. }
复制代码

  1. public class MyLock extends Thread {

  2.         private int x = 0;

  3.         @Override
  4.         public void run() {
  5.                 //m1,m2
  6.                
  7.                
  8.                 while(true){
  9.                        
  10.                         //m1,m2
  11.                        
  12.                         if (x % 2 == 0) {
  13.                                
  14.                                 //第一个人   m1
  15.                                 synchronized (MeLock.objA) {
  16.                                         System.out.println("objA--(if)");
  17.                                        
  18.                                         //模拟抢第二个人的筷子
  19.                                         synchronized (MeLock.objB) {
  20.                                                 System.out.println("objB---(if)");
  21.                                         }
  22.                                 }
  23.                                
  24.                                
  25.                         } else {
  26.                                        
  27.                                 //另一个人
  28.                                 synchronized (MeLock.objB) {
  29.                                         System.out.println("objB---(else)");
  30.                                        
  31.                                         //原来的第一个人  又想吃
  32.                                        
  33.                                         //模拟抢第一个人的筷子
  34.                                         synchronized (MeLock.objA) {
  35.                                                 System.out.println("objA---(else)");
  36.                                         }
  37.                                 }
  38.                         }
  39.                        
  40.                         x++;
  41.                 }
  42.         }
  43. }
复制代码
  1. /*
  2. *        锁对象
  3. */
  4. public class MeLock {
  5.         public static Object objA = new Object();
  6.         public static Object objB = new Object();
  7. }
复制代码

死锁的例子
回复 使用道具 举报
a b两个锁嵌套在两个方法中,第一个方法中a锁嵌套b锁,第二个方法中b锁嵌套a锁,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马