java查看对象锁级别_Java中的对象级别锁与类级别锁?

两个对象级锁和类级别LOC k的用于实现同步机制在多线程应用程序。

对象级别锁定

Java中的每个对象都有一个唯一的锁。如果线程要在给定对象上执行同步方法,则首先必须获得该对象的锁。一旦线程获得了锁,就可以在该对象上执行任何同步方法。一旦方法执行完成,线程将自动释放锁。JVM负责内部获取和释放锁。对象级锁是一种机制,当我们要同步非静态方法或者非静态代码块,使得只有一个线程就可以在类的给定实例执行的代码块。始终可以这样做,以使实例级数据成为线程安全的。

示例public class ObjectLevelLockTest implements Runnable {

@Override

public void run() {

objectLock();

}

public void objectLock() {

System.out.println(Thread.currentThread().getName());

synchronized(this) {

System.out.println("Synchronized block " + Thread.currentThread().getName());

System.out.println("Synchronized block " + Thread.currentThread().getName() + " end");

}

}

public static void main(String[] args) {

ObjectLevelLockTest test1 = new ObjectLevelLockTest();

Thread t1 = new Thread(test1);

Thread t2 = new Thread(test1);

ObjectLevelLockTest test2 = new ObjectLevelLockTest();

Thread t3 = new Thread(test2);

t1.setName("t1");

t2.setName("t2");

t3.setName("t3");

t1.start();

t2.start();

t3.start();

}

}

输出结果t1

t2

t3

Synchronized block t1

Synchronized block t3

Synchronized block t1 end

Synchronized block t3 end

Synchronized block t2

Synchronized block t2 end

类锁

Java中的每个类都有一个唯一的锁,它只不过是一个类级别的锁。如果线程要执行静态同步方法,则线程需要类级锁。一旦线程获得了类级别的锁,便可以执行该类的任何静态同步方法。一旦方法执行完成,线程将自动释放锁。的类级锁防止多个线程在进入同步块中的任何运行时所有可用的实例。

示例public class ClassLevelLockTest implements Runnable {

@Override

public void run() {

classLock();

}

public void classLock() {

System.out.println(Thread.currentThread().getName());

synchronized(ClassLevelLockTest.class) {

System.out.println("Synchronized block " + Thread.currentThread().getName());

System.out.println("Synchronized block " + Thread.currentThread().getName() + " end");

}

}

public static void main(String[] args) {

ClassLevelLockTest test1 = new ClassLevelLockTest();

Thread t1 = new Thread(test1);

Thread t2 = new Thread(test1);

ClassLevelLockTest test2 = new ClassLevelLockTest();

Thread t3 = new Thread(test2);

t1.setName("t1");

t2.setName("t2");

t3.setName("t3");

t1.start();

t2.start();

t3.start();

}

}

输出结果t3

t2

t1

Synchronized block t3

Synchronized block t3 end

Synchronized block t2

Synchronized block t2 end

Synchronized block t1

Synchronized block t1 end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值