证明Class锁的存在

    技术2025-04-05  34

    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 锁是存在的,
    Processed: 0.010, SQL: 9