当前位置:   article > 正文

java 静态方法枷锁_Java synchronized静态方法使用synchronized加锁

java 静态方法加锁

昆明达内Java培训的老师上一期讲了Java synchronized实例方法使用synchronized加锁,这一期给同学们讲Java synchronized静态方法使用synchronized加锁。

二、静态方法中使用synchronized加锁

静态方法中默认被加锁的对象是此静态方法所在类的class对象。

1 class

staticMethodSynchronized {

2    public static synchronized void method1() throws InterruptedException {

3        System.out.println(Thread.currentThread().getName() + ":

start");

4        Thread.sleep(5000);

5        System.out.println(Thread.currentThread().getName() + ": finish");

6    }

7    public static synchronized void method2() throws InterruptedException {

8        System.out.println(Thread.currentThread().getName() + ":

start");

9        Thread.sleep(5000);

10        System.out.println(Thread.currentThread().getName() + ":

finish");

11    }

12 }

13 public class

TestStaticClassSynchronized {

14    public static void main(String[] args) {

15        Thread t1 = new Thread(new Runnable()

{

16

17            @Override

18            public void run() {

19                // TODO Auto-generated method stub

20                try {

21                    staticMethodSynchronized.method1();

22                } catch (InterruptedException

e) {

23                    // TODO Auto-generated

catch block

24                    e.printStackTrace();

25                }

26            }

27

28        }, "t1");

29        Thread t2 = new Thread(new Runnable()

{

30

31            @Override

32            public void run() {

33                // TODO Auto-generated method

stub

34                try {

35                    staticMethodSynchronized.method2();

36                } catch (InterruptedException

e) {

37                    // TODO Auto-generated

catch block

38                    e.printStackTrace();

39                }

40            }

41

42        }, "t2");

43        t1.start();

44        t2.start();

45    }

46 }

在上述代码中创建了两个线程并命名为t1,t2。t1,t2线程调用了staticMethodSynchronized类的两个静态同步方法method1和method2。

在t1线程开始执行后,即使t1线程睡眠了5s,线程t2中的method2方法仍然没有得到执行。这是因为t1线程先执行的method1方法,持有了staticMethodSynchronized类对象的锁,且method1方法并没有执行完,staticMethodSynchronized类对象的锁没有被释放,所以comeInIn方法无法对staticMethodSynchronized类对象加锁,就无法继续执行,只能等到t1线程中的method1方法执行完毕,释放staticMethodSynchronized类对象的锁,method2方法才能继续执行。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/212632
推荐阅读
相关标签
  

闽ICP备14008679号