public class SynchronizedThis {
public static void main(String[] args) {
ThisLock thisLock = new ThisLock();
new Thread("T1") {
@Override
public void run() {
thisLock.m1();
}
}.start();
new Thread("T2") {
@Override
public void run() {
thisLock.m2();
}
}.start();
}
}
class ThisLock {
public void m1() {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(10_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void m2() {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(10_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
以上 代码执行,线程几乎同时结束,证明程序并没有锁住,
class ThisLock {
private final Object LOCK = new Object();
public void m1() {
synchronized(LOCK) {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(10_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void m2() {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(10_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
以上 代码执行证明, 输出结果是先一个执行,间隔十秒 ,继续往下执行,正面证明了锁的存在,这就是this 锁的存在,
class ThisLock {
private final Object LOCK = new Object();
public void m1() {
synchronized(LOCK) {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(10_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void m2() {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(10_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
同样的上面的代码与步骤1是一样的结果,同时输出,证明用了两个锁,侧面证明了this 锁是存在的,
转载请注明原文地址:https://ipadbbs.8miu.com/read-55942.html