一个关于synchronized小问题
public class Test {
public Test() {
}
public synchronized void a(){
System.out.println("aa");
}
public synchronized void b(){
a();
}
public static void main(String[] args){
Test t = new Test();
t.b();
}
}
调用b()的时候,应该锁定对象,但是a()怎么又执行了呢?
请教大家了,谢谢!
[283 byte] By [
msdn] at [2007-9-26 8:19:54]

# 1 Re: 一个关于synchronized小问题
你是在一个线程中!
zhngk at 2005-5-30 14:26:07 >

# 2 Re: 一个关于synchronized小问题
mark
# 3 Re: 一个关于synchronized小问题
b() 调用a()的方法不矛盾
# 4 Re: 一个关于synchronized小问题
靠,你锁定什么对象了,我认为代码中没有锁定任何对象
# 5 Re: 一个关于synchronized小问题
你是猪变的啊
# 6 Re: 一个关于synchronized小问题
方法a这样声明,表示一个线程只有获取了当前Test实例的锁时才可以执行a
public synchronized void a(){
System.out.println("aa");
}
方法b也是一样,它要求的也是同样的锁
main方法所在的线程执行b,就已经获得了this对应的锁,所以它可以执行方法a,就相当于你家的所有的门都使用同一把钥匙,那么你只要带一把钥匙就可以了。
# 7 Re: 一个关于synchronized小问题
你锁定什么了?
# 8 Re: 一个关于synchronized小问题
搞笑啊,没线程,你用同步给鬼看啊?
# 9 Re: 一个关于synchronized小问题
真搞不懂,现在越来越多的人到论坛里来风言风语,这里是讨论技术问题的,会的就回答问题,不会也谦虚点,老说些不着边际的话很有趣吗?
怎么没有线程?你的main方法也是虚拟机在一个线程里执行的,不管执行什么程序,虚拟机里本身就有自己的多线程环境。楼主只是写个简单的例子来问这个问题,难道非要让人家把多线程的代码全部贴出来?
# 10 Re: 一个关于synchronized小问题
楼上的搞什么啊,MAIN()产生的是精灵线程,和用户线程2回马子事情,不懂不要装懂,更不要误倒别人.
真怀疑你懂不懂什么synchronized的具体含义和用法.
不写用户多线程怎么看的出是同步还是异步的?
# 11 Re: 一个关于synchronized小问题
应该两个方法都是用this锁,就是Test的个对象。
# 12 Re: 一个关于synchronized小问题
hehe ,精彩
# 13 Re: 一个关于synchronized小问题
to chongkai() :
真不知道怎么说你了,请弄清JVM的作用,JVM是调度线程的.
如果你说MAIN()产生的不是精灵线程,那算什么?难道是用户线程?JAVA就分2种线程类别.
还有你说单线程可以用synchronized,这个我不否认.
我最终意思就是说楼主举例不到位.
# 14 Re: 一个关于synchronized小问题
两位莫争了。高下已分,还争什么!!!!!
usaspy at 2005-5-31 13:43:13 >

# 15 Re: 一个关于synchronized小问题
先给人家解决问题吧
# 16 Re: 一个关于synchronized小问题
楼上的不厚道,这个回答的已经很明确了,也没什么东西,倒是两个人的辩论倒是让人打开眼界,
chongkai() 佩服!
楼主的答案不就是这个吗,让我重贴一次!
方法a这样声明,表示一个线程只有获取了当前Test实例的锁时才可以执行a
public synchronized void a(){
System.out.println("aa");
}
方法b也是一样,它要求的也是同样的锁
main方法所在的线程执行b,就已经获得了this对应的锁,所以它可以执行方法a,就相当于你家的所有的门都使用同一把钥匙,那么你只要带一把钥匙就可以了。
# 17 Re: 一个关于synchronized小问题
原来如此