课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > Java synchronized静态方法使用synchronized加锁
  • Java synchronized静态方法使用synchronized加锁

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-07

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

    推荐文章

上一篇:Java synchronized实例方法使用synchronized加锁

下一篇:实例方法中使用synchronized关键字制造同步块

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56