Jvm: synchronized锁定谁?

网友投稿 433 2022-11-09

Jvm: synchronized锁定谁?

Jvm: synchronized锁定谁?

当调用一个对象的非静态的synchronized方法时,锁定的是对象本身; 当调用一个对象的静态的synchronized方法时,锁定的是对象所属的类的class对象(在方法区中) 示例如下:

package cn.edu.tju;public class JvmLockTest { public static void main(String[] args) { MyClass myClass = new MyClass(); Thread t1 = new Thread(new Runnable() { @Override public void run() { myClass.func1(); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { myClass.func2(); } }); t1.start(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } t2.start(); }}class MyClass { public synchronized void func1(){ try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("in func1......"); } public static synchronized void func2(){ System.out.println("in func2......"); }}

输出:

可以看到第一个线程拿到myClass对象的锁的时候,第二个线程调用静态的func2方法时并没有被阻塞,因为它获取的是MyClass这个class对象的锁,而不是myClass这个对象的锁

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:GEE导出图像到本地结果全部为空
下一篇:蓝牙gap协议
相关文章

 发表评论

暂时没有评论,来抢沙发吧~