【面试】当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
问题:当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
回答:不能,一个对象的一个synchronized方法只能由一个线程访问。?
纠正:对象的synchronized方法不能进入了,但它的其他非synchronized方法还是可以访问的。
?
?
public class ThreadTest { int i = 0; int j = 0; public static void main(String[] args) { final ThreadTest threadTest = new ThreadTest(); new Thread() { public void run() { threadTest.printI(); } }.start(); new Thread() { public void run() { threadTest.printJ(); } }.start(); } public synchronized void printI() { while (i < 100) System.out.println("i==" + i++); } public void printJ() { while (j < 10) System.out.println("j==" + j++); } }
?运行结果:
C:\Program Files\Notepad++>java -cp "D:\shanshan\java" "ThreadTest"i==0i==1j==0i==2j==1i==3j==2i==4j==3i==5j==4i==6j==5i==7j==6i==8j==7i==9j==8i==10j==9i==11i==12i==13i==14i==15i==16i==17i==18i==19i==20i==21i==22i==23i==24i==25i==26i==27i==28i==29i==30i==31i==32i==33i==34i==35i==36i==37i==38i==39i==40i==41i==42i==43i==44i==45i==46i==47i==48i==49i==50i==51i==52i==53i==54i==55i==56i==57i==58i==59i==60i==61i==62i==63i==64i==65i==66i==67i==68i==69i==70i==71i==72i==73i==74i==75i==76i==77i==78i==79i==80i==81i==82i==83i==84i==85i==86i==87i==88i==89i==90i==91i==92i==93i==94i==95i==96i==97i==98i==99C:\Program Files\Notepad++>pause请按任意键继续. . .
?
太深奥了 米有看懂,,,,,,