Java中的对象级别锁与类级别锁?
两个对象级锁和类级别LOCk的用于实现同步 机制在多线程应用程序。
对象级别锁定
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
热门推荐
10 诗词送行祝福语大全简短
11 新房开工吉日祝福语简短
12 50多岁生日简短祝福语
13 安徽疫情祝福语简短英语
14 农民朋友发财祝福语简短
15 对生活祝福语简短精辟
16 搬家词简短祝福语朋友
17 女神结婚快乐祝福语简短
18 文学短句祝福语大全简短