码迷,mamicode.com
首页 > 编程语言 > 详细

线程死锁

时间:2017-09-01 22:14:18      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:dea   演示   lock   ati   logs   pre   ble   主程序   sys   

所谓的线程死锁,是指在多线程运行的过程中,线程1拥有锁a,而需要锁b来继续执行,
而此时,线程2拥有锁b而需要锁a来继续执行,那么此时会形成死锁,两个线程会同时等待。
在编程的过程中应尽量的避免线程死锁。
有时在面试中会要求写出一个死锁的程序演示,如下:
 1 //写一个死锁程序
 2 public class DeadLock {
 3      //主程序执行
 4      public static void main(String[] args) {
 5           Thread thread1 = new Thread(new MyThread(true));
 6           Thread thread2 = new Thread(new MyThread(true));
 7           thread1.start();
 8           thread1.start();
 9           thread2.start();
10      }
11 }
12 class MyThread implements Runnable{
13      private boolean flag;
14      //标记,用来分割线程执行部分
15      public MyThread(boolean flag) {
16           this.flag = flag;
17      }
18      @Override
19      public void run() {
20           if (flag) {
21                //线程1拥有锁1而需要锁2
22               synchronized(MyLock.object1) {
23                    System.out.println("锁1");
24                    synchronized(MyLock.object2) {
25                         System.out.println("锁2");
26                    }
27               }
28           }else {
29                //线程2拥有锁2而需要锁1
30               synchronized(MyLock.object2) {
31                    System.out.println("锁2");
32                    synchronized(MyLock.object1) {
33                         System.out.println("锁1");
34                    }
35               }
36           }
37 
38      }
39 }
40 class MyLock{
41      //创建两个显式的锁
42      static Object object1 = new Object();
43      static Object object2 = new Object();
44 }

 

线程死锁

标签:dea   演示   lock   ati   logs   pre   ble   主程序   sys   

原文地址:http://www.cnblogs.com/anzhi/p/7465153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!