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

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住当前的一个实体吗?

谢谢!


...全文
43 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
王鹏云 2002-03-13
  • 打赏
  • 举报
回复
呵呵,java中的对象赋值传递的是引用,所以他们的letter都是同一个对象,
如果要用不同对象,要使用clone
虎叔 2002-03-13
  • 打赏
  • 举报
回复
他们的letter当然是一个实体对象new StringBuffer("A")啦!

23,409

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧