【面试】当一个线程进入一个对象的一个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==0
i==1
j==0
i==2
j==1
i==3
j==2
i==4
j==3
i==5
j==4
i==6
j==5
i==7
j==6
i==8
j==7
i==9
j==8
i==10
j==9
i==11
i==12
i==13
i==14
i==15
i==16
i==17
i==18
i==19
i==20
i==21
i==22
i==23
i==24
i==25
i==26
i==27
i==28
i==29
i==30
i==31
i==32
i==33
i==34
i==35
i==36
i==37
i==38
i==39
i==40
i==41
i==42
i==43
i==44
i==45
i==46
i==47
i==48
i==49
i==50
i==51
i==52
i==53
i==54
i==55
i==56
i==57
i==58
i==59
i==60
i==61
i==62
i==63
i==64
i==65
i==66
i==67
i==68
i==69
i==70
i==71
i==72
i==73
i==74
i==75
i==76
i==77
i==78
i==79
i==80
i==81
i==82
i==83
i==84
i==85
i==86
i==87
i==88
i==89
i==90
i==91
i==92
i==93
i==94
i==95
i==96
i==97
i==98
i==99

C:\Program Files\Notepad++>pause
请按任意键继续. . .

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值