Java中的MultiTheading具有静态和非静态方法

时间:2015-07-26 14:45:59

标签: java multithreading static non-static

我一直在尝试java中多线程的不同行为。如果我在类中使用同步静态和非静态方法。 我所理解的是,

- >如果线程进入同步方法,则线程获取对象的锁定,直到执行方法。

- >如果线程进入静态同步方法,则线程获取类的锁而不是对象。

Real confusion部分是输出??。

Payment

2 个答案:

答案 0 :(得分:2)

同步static方法获取Class对象X上的锁定,该对象表示定义方法的类。在这种情况下,synchronized关键字原则上只用于static方法之间的同步。

而同步实例(非static)方法会锁定调用该方法的当前对象Y

因此,同步static方法和同步实例方法仍然可以交错,因为它们会锁定两个不同的对象。

答案 1 :(得分:1)

static方法锁定/解锁类(MyRunable)对象,其中非静态方法锁定/取消MyRunable个对象。我的意思是,这两者都不同。

  

同步方法(§8.4.3.6)会自动执行锁定操作   什么时候被调用;在锁定动作之前,它的主体不会被执行   成功完成。

     

如果方法是实例方法,则会锁定与之关联的监视器   与调用它的实例(即,对象   在执行方法体时将被称为这个。

     

如果方法是静态的,它会锁定与之关联的监视器   表示方法所在的类的类对象   定义

     

如果方法的正文执行完毕,则正常   或者突然,对其自动执行解锁动作   监视。

Link