当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
分两种情况
1):进入此对象的非同步方法
答案:可以
2):进入此对象的同步方法
答案:不可以
第一种情况原代码
/** * */ package thread; /** * @author Administrator * */ public class TestClass { /** * @param args */ public static void main(String[] args) { TestClass tc = new TestClass(); Thread1 t1 = tc.new Thread1(tc); t1.start(); Thread2 t2 = tc.new Thread2(tc); t2.start(); } class Thread1 extends Thread{ TestClass tc = null; public Thread1(TestClass tc) { this.tc = tc; } @Override public void run() { tc.method1(); } } class Thread2 extends Thread{ TestClass tc = null; public Thread2(TestClass tc) { this.tc = tc; } @Override public void run() { // TODO Auto-generated method stub tc.method2(); } } public synchronized void method1(){ System.out.println("method1"); try { Thread.sleep(1000*10); } catch (InterruptedException e) { e.printStackTrace(); } } public void method2(){ System.out.println("method2"); } }
第二种情况原代码
/** * */ package thread; /** * @author Administrator * */ public class TestClass { /** * @param args */ public static void main(String[] args) { TestClass tc = new TestClass(); Thread1 t1 = tc.new Thread1(tc); t1.start(); Thread2 t2 = tc.new Thread2(tc); t2.start(); } class Thread1 extends Thread{ TestClass tc = null; public Thread1(TestClass tc) { this.tc = tc; } @Override public void run() { tc.method1(); } } class Thread2 extends Thread{ TestClass tc = null; public Thread2(TestClass tc) { this.tc = tc; } @Override public void run() { // TODO Auto-generated method stub tc.method2(); } } public synchronized void method1(){ System.out.println("method1"); try { Thread.sleep(1000*10); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void method2(){ System.out.println("method2"); } }