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

昆明达内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)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值