Thread.sleep(3000);
System.out.println(Thread.currentThread().getName() + " : 加Class对象锁的静态方法运行结束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void syncClassYes() {
synchronized (SyncStaticYesAndNo.class) {
try {
System.out.println(Thread.currentThread().getName() + " : 加Class对象锁的非静态方法运行开始n");
Thread.sleep(3000);
System.out.println(Thread.currentThread().getName() + " : 加Class对象锁的非静态方法运行结束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
if (Thread.currentThread().getName().equals("Thread-0")) {
syncStaticYes1();
} else if (Thread.currentThread().getName().equals("Thread-1")) {
syncStaticYes2();
} else if (Thread.currentThread().getName().equals("Thread-2")) {
syncStaticNo();
} else if (Thread.currentThread().getName().equals("Thread-3")) {
syncYes();
} else if (Thread.currentThread().getName().equals("Thread-4")) {
syncNo();
} else if (Thread.currentThread().getName().equals("Thread-5")) {
syncStaticClassYes();
} else if (Thread.currentThread().getName().equals("Thread-6")) {
syncClassYes();
}
}
public static void main(String[] args) {
SyncStaticYesAndNo obj = new SyncStaticYesAndNo();
Thread t1 = new Thread(obj);
Thread t2 = new Thread(obj);
Thread t3 = new Thread(obj);
Thread t4 = new Thread(obj);
Thread t5 = new Thread(obj);
Thread t6= new Thread(obj);
Thread t7 = new Thread(obj);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
t7.start();
}
}
这里,我们使用了七个线程来模拟多个情况,然后几乎同时调用七个方法,由之前的分析,我们可以推测,只有竞争统一把锁,才会产生阻塞情况,所以结果如下:
Thread-1 : 加锁的静态方法运行开始
Thread-3 : 加锁的非静态方法运行开始
Thread-2 : 不加锁的静态方法运行开始
Thread-4 : 不加锁的非静态方法运行开始
Thread-3 : 加锁的非静态方法运行结束
Thread-1 : 加锁的静态方法运行结束
Thread-2 : 不加锁的静态方法运行结束
Thread-6 : 加Class对象锁的非静态方法运行开始
Thread-4 : 不加锁的非静态方法运行结束
Thread-6 : 加Class对象锁的非静态方法运行结束
Thread-5 : 加Class对象锁的静态方法运行开始
Thread-5 : 加Class对象锁的静态方法运行结束
Thread-0 : 加锁的静态方法运行开始
Thread-0 : 加锁的静态方法运行结束
结论我们可以看到,不加锁的没有受到任何影响,而加了锁的非静态方法也没有受到任何影响,因为它所竞争的锁并非是Class对象锁,而是实例对象锁,受到影响的有synchronized修饰的静态方法,还有便是加了Class对象锁的方法,本质上便是它们都在竞争当前类的Class对象锁 。
推荐阅读
- 梦到一群狼但没伤到自己 梦见好多狼但是都不伤害人
- 研究表明,每天杯茶好处多
- 一个Java字符串中到底有多少个字符?
- 世界十大宝藏之谜 世界十大未找到的宝藏
- 花洒软管直径是多少厘米,家用花洒管是统一尺寸吗
- 五个月孕妇瑜伽怎么练习呢?
- 大学生开网店的利与弊 大学生淘宝开店好不好
- 我国许多少数民族都能歌善舞 能歌善舞的少数民族
- 世界上打破世界纪录最多的人 最恐怖的世界纪录
- 骑自行车锻炼什么呢