public class TestThread6 { public static void main(String[] args) throws InterruptedException { MyClass mo = new MyClass(); Prooess p = new Prooess(mo);//同一个对象 Thread t1 = new Thread(p); t1.setName("t1"); Thread t2 = new Thread(p); t2.setName("t2"); //启动线程 t1.start(); Thread.sleep(3000); t2.start(); } } class Prooess implements Runnable{ MyClass mo ; public Prooess(MyClass mo){ this.mo = mo; } @Override public void run() { if(Thread.currentThread().getName().equals("t1")) { mo.m1(); } if(Thread.currentThread().getName().equals("t2")){ mo.m2(); } } } class MyClass{ public synchronized void m1(){ //休眠 try{ Thread.sleep(10000); }catch (Exception e){ e.printStackTrace(); } System.out.println("m1"); } // public void m2(){//这里没有加锁 不需要等m1执行完直接输出 //// System.out.println("m2"); //// } public synchronized void m2(){//同一把锁 System.out.println("m2"); } }