请教一个关于线程同步的问题。

hfiles2003 2002-03-13 11:16:57
请看以下代码:

1. class InSync extends Thread {
2. StringBuffer letter;
3.
4. public InSync(StringBuffer letter) {
5. this.letter = letter;
6. }
7.
8. public void run() {
9. synchronized(letter) {
10. for(int i = 1;i<=100;++i) {
11. System.out.print(letter);
12. }
13. System.out.println();
14. // Increment the letter in StringBuffer:
15. char temp = letter.charAt(0);
16. ++temp;
17. letter.setCharAt(0, temp);
18. }
19. }
20.
21. public static void main(String [] args) {
22. StringBuffer sb = new StringBuffer("A");
23. new InSync(sb).start();
24. new InSync(sb).start();
25. new InSync(sb).start();
26. }
27. }

我的问题是:
在MAIN方法中,这里创建了3个不同的实体。他们各自的letter也应该不是同一个实体,但为什么他们synchonized了的方法LOCK住的却是同一个letter呢?同步方法不是只LOCK住当前的一个实体吗?

谢谢!


...全文
5 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
王鹏云 2002-03-13
呵呵,java中的对象赋值传递的是引用,所以他们的letter都是同一个对象,
如果要用不同对象,要使用clone
回复
虎叔 2002-03-13
他们的letter当然是一个实体对象new StringBuffer("A")啦!
回复
相关推荐
发帖
非技术区
创建于2007-09-28

2.3w+

社区成员

Java 非技术区
申请成为版主
帖子事件
创建了帖子
2002-03-13 11:16
社区公告
暂无公告