本文共 1581 字,大约阅读时间需要 5 分钟。
package com.ljf.mianshi.demo.mainshithread;public class TestJd { public static void main(String args[]){ JDSB jdsb=new JDSB(); JDSB jdsb2=new JDSB(); new Thread(new ThreadA(jdsb),"A").start(); new Thread(new ThreadB(jdsb),"B").start(); }}package com.ljf.mianshi.demo.mainshithread;public class JDSB { public static synchronized void sayA() { System.out.println("我是线程:"+Thread.currentThread().getName()+"我开始执行sayA"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("我是线程:"+Thread.currentThread().getName()+"我离开sayA"); } public synchronized void sayB(){ System.out.println("我是线程:"+Thread.currentThread().getName()+"我开始执行sayB"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("我是线程:"+Thread.currentThread().getName()+"我离开sayB"); }}package com.ljf.mianshi.demo.mainshithread;public class ThreadA implements Runnable { JDSB jdsb=null; public ThreadA(JDSB jdsb) { this.jdsb=jdsb; } @Override public void run() { jdsb.sayA(); }}package com.ljf.mianshi.demo.mainshithread;public class ThreadB implements Runnable { JDSB jdsb=null; public ThreadB(JDSB jdsb) { this.jdsb=jdsb; } @Override public void run() { jdsb.sayB(); }}
结果:
我是线程:A我开始执行sayA
我是线程:B我开始执行sayB 我是线程:A我离开sayA 我是线程:B我离开sayB结论:
异步原因是持有不同的锁,一个是对象锁,另外一个是Class锁,Class锁可以对所有持有class锁的对象实例起作用
转载地址:http://hxtgi.baihongyu.com/