Sign-up....

一个关于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

zhangqingqi82 at 2005-5-30 14:38:47 >
# 3 Re: 一个关于synchronized小问题

b() 调用a()的方法不矛盾

qingzhuang at 2005-5-30 15:00:06 >
# 4 Re: 一个关于synchronized小问题

靠,你锁定什么对象了,我认为代码中没有锁定任何对象

stray1718 at 2005-5-30 20:30:28 >
# 5 Re: 一个关于synchronized小问题

你是猪变的啊

jidengda at 2005-5-30 20:42:08 >
# 6 Re: 一个关于synchronized小问题

方法a这样声明,表示一个线程只有获取了当前Test实例的锁时才可以执行a

public synchronized void a(){

System.out.println("aa");

}

方法b也是一样,它要求的也是同样的锁

main方法所在的线程执行b,就已经获得了this对应的锁,所以它可以执行方法a,就相当于你家的所有的门都使用同一把钥匙,那么你只要带一把钥匙就可以了。

chongkai at 2005-5-30 21:33:48 >
# 7 Re: 一个关于synchronized小问题

你锁定什么了?

evil_nowt at 2005-5-30 22:25:37 >
# 8 Re: 一个关于synchronized小问题

搞笑啊,没线程,你用同步给鬼看啊?

sunjie1981 at 2005-5-30 23:20:05 >
# 9 Re: 一个关于synchronized小问题

真搞不懂,现在越来越多的人到论坛里来风言风语,这里是讨论技术问题的,会的就回答问题,不会也谦虚点,老说些不着边际的话很有趣吗?

怎么没有线程?你的main方法也是虚拟机在一个线程里执行的,不管执行什么程序,虚拟机里本身就有自己的多线程环境。楼主只是写个简单的例子来问这个问题,难道非要让人家把多线程的代码全部贴出来?

chongkai at 2005-5-31 0:51:54 >
# 10 Re: 一个关于synchronized小问题

楼上的搞什么啊,MAIN()产生的是精灵线程,和用户线程2回马子事情,不懂不要装懂,更不要误倒别人.

真怀疑你懂不懂什么synchronized的具体含义和用法.

不写用户多线程怎么看的出是同步还是异步的?

sunjie1981 at 2005-5-31 1:20:54 >
# 11 Re: 一个关于synchronized小问题

应该两个方法都是用this锁,就是Test的个对象。

dongdong715 at 2005-5-31 12:01:31 >
# 12 Re: 一个关于synchronized小问题

hehe ,精彩

shockely at 2005-5-31 12:22:41 >
# 13 Re: 一个关于synchronized小问题

to chongkai() :

真不知道怎么说你了,请弄清JVM的作用,JVM是调度线程的.

如果你说MAIN()产生的不是精灵线程,那算什么?难道是用户线程?JAVA就分2种线程类别.

还有你说单线程可以用synchronized,这个我不否认.

我最终意思就是说楼主举例不到位.

sunjie1981 at 2005-5-31 12:40:12 >
# 14 Re: 一个关于synchronized小问题

两位莫争了。高下已分,还争什么!!!!!

usaspy at 2005-5-31 13:43:13 >
# 15 Re: 一个关于synchronized小问题

先给人家解决问题吧

KFeng_bird at 2005-5-31 15:01:31 >
# 16 Re: 一个关于synchronized小问题

楼上的不厚道,这个回答的已经很明确了,也没什么东西,倒是两个人的辩论倒是让人打开眼界,

chongkai() 佩服!

楼主的答案不就是这个吗,让我重贴一次!

方法a这样声明,表示一个线程只有获取了当前Test实例的锁时才可以执行a

public synchronized void a(){

System.out.println("aa");

}

方法b也是一样,它要求的也是同样的锁

main方法所在的线程执行b,就已经获得了this对应的锁,所以它可以执行方法a,就相当于你家的所有的门都使用同一把钥匙,那么你只要带一把钥匙就可以了。

liuquanyi at 2005-5-31 16:04:21 >
# 17 Re: 一个关于synchronized小问题

原来如此

KFeng_bird at 2005-5-31 17:05:46 >

Web

All Classified