好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java线程死锁代码详解

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

/**

  * @author hollis

  */

public class JStackDemo {

     public static void main(String[] args) {

         Thread t1 = new Thread( new DeadLockclass( true )); //建立一个线程

         Thread t2 = new Thread( new DeadLockclass( false )); //建立另一个线程

         t1.start(); //启动一个线程

         t2.start(); //启动另一个线程

     }

}

class DeadLockclass implements Runnable {

     public boolean falg; // 控制线程

     DeadLockclass( boolean falg) {

         this .falg = falg;

     }

     public void run() {

         /**

          * 如果falg的值为true则调用t1线程

          */

         if (falg) {

             while ( true ) {

                 synchronized (Suo.o1) {

                     System.out.println( "o1 " + Thread.currentThread().getName());

                     synchronized (Suo.o2) {

                         System.out.println( "o2 " + Thread.currentThread().getName());

                     }

                 }

             }

         }

         /**

          * 如果falg的值为false则调用t2线程

          */

         else {

             while ( true ) {

                 synchronized (Suo.o2) {

                     System.out.println( "o2 " + Thread.currentThread().getName());

                     synchronized (Suo.o1) {

                         System.out.println( "o1 " + Thread.currentThread().getName());

                     }

                 }

             }

         }

     }

}

 

class Suo {

     static Object o1 = new Object();

     static Object o2 = new Object();

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

import org.springframework.stereotype.Component;

 

 

@Component

public class SynchronizedTest {

 

       private static final Object lockA = new Object();

       private static final Object lockB = new Object();

 

      

      

       /**

        * ThreadA先获取lockA,在获取lockB

        */

       private static class ThreadA extends java.lang.Thread {

 

         @Override

         public void run() {

           // 获取临界区A

           synchronized (lockA) {

             System.out.println( "get lockA success" );

             // 模拟耗时操作

             try {

                 Thread.currentThread().setName( "线程A" );

               Thread.sleep( 500 );

             } catch (InterruptedException e) {

               e.printStackTrace();

             }

             // 获取临界区B

             synchronized (lockB) {

               System.out.println( "get lockB success" );

             }

           }

         }

       }

 

       /**

        * ThreadB先获取lockB,在获取lockA

        */

       private static class ThreadB extends java.lang.Thread {

 

         @Override

         public void run() {

           // 获取临界区A

           synchronized (lockB) {

             System.out.println( "get lockB success" );

             // 模拟耗时操作

             try {

                 Thread.currentThread().setName( "线程B" );

               Thread.sleep( 500 );

             } catch (InterruptedException e) {

               e.printStackTrace();

             }

             // 获取临界区B

             synchronized (lockA) {

               System.out.println( "get lockA success" );

             }

           }

         }

       }

      

       static {

           new ThreadA().start();

           new ThreadB().start();

       }

     }

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!

原文链接:https://HdhCmsTestcnblogs测试数据/shihaiming/p/11459953.html

查看更多关于Java线程死锁代码详解的详细内容...

  阅读:14次