好得很程序员自学网

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

详解Java利用同步块synchronized()保证并发安全

本文实例为大家分享了java利用同步块synchronized()保证并发安全的具体代码,供大家参考,具体内容如下

?

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

package day10;

/**

  * 同步块

  * 有效地缩小同步范围

  * 可以在保证并发安全的同时尽可能提高并发效率

  *

  * 实例:模拟两个人同时进店买衣服,为提高效率

  *       只在试衣服阶段进行同步排队过程,其他阶段无需排队。

  * @author kaixu

  *

  */

public class syncdemo2 {

 

     public static void main(string[] args) {

     shop shop = new shop();

     thread t1 = new thread(){

         public void run() {

             shop.buy();

         }

     };

     thread t2 = new thread(){

         public void run() {

             shop.buy();

         }

     };

     t1.start();

     t2.start();

     }

}

class shop{

     public void buy(){

         //获取运行buy方法的线程

         thread t = thread.currentthread();

         try {

             system.out.println(t.getname()+ ":正在挑衣服..." );

             thread.sleep( 5000 );

             /**

              * 同步块可以要求多个线程对该块内的代码排队执行

              * 但是前提条件是同步监视器对象(即上锁的对象)

              * 要求多个线程看到的必须是同一个。

              * synchronized(同步监视器对象){

              *      需要同步的代码

              * }

              * 所谓同步执行即:多个线程必须排队执行

              * 所谓异步执行即:多个线程可以同时执行

              */

             synchronized ( this ) {

                 system.out.println(t.getname()+ ":正在试衣服..." );

                 thread.sleep( 5000 );

             }

             system.out.println(t.getname()+ ":结账离开。" );

         } catch (exception e) {

             e.printstacktrace();

         }

     }

}

以上所述是小编给大家介绍的java利用同步块synchronized()保证并发安全详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

原文链接:https://blog.csdn.net/a771581211/article/details/88701005

查看更多关于详解Java利用同步块synchronized()保证并发安全的详细内容...

  阅读:14次