多线程问题,不明白结果

neary 2005-11-18 04:03:30
public class TestThread extends Object implements Runnable
{
String s1 = "Earth";

String s2 = "Moon";

public void run()
{
synchronized (s1)
{
for (int i = 0; i < 2; i++)
{
System.out.println(Thread.currentThread().getName());
s1.concat("to Moon");
System.out.println(s1);
s2.concat("to Earth");
System.out.println(s2);
}
}
}

public static void main(String[] args)
{
//System.out.println("Earch".concat("to Moon"));
TestThread t = new TestThread();
new Thread(t).start();
new Thread(t).start();
}
}
/*
结果:
Thread-0
Earth
Moon
Thread-0
Earth
Moon
Thread-1
Earth
Moon
Thread-1
Earth
Moon
*/
...全文
74 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingofhawks 2005-11-18
  • 打赏
  • 举报
回复
需要注意的一点是synchronized是对对象同步而不是对函数,所以synchronized (s1)是锁住s1变量,因为在你的代码中两个线程都使用了t object,所以也是共用了t.s1.
kingofhawks 2005-11-18
  • 打赏
  • 举报
回复
有什么不能理解的?
synchronized (s1)取得s1的lock,
TestThread t = new TestThread();
new Thread(t).start();
new Thread(t).start();
虽然生成了两个线程,但是因为使用了同一个线程对象t,因为run函数是在s1上做同步的,所以这两个同步线程只有一个取得s1的lock并运行,当它结束之后另一个线程才能取得lock并运行,所以在输出中看不到两个线程交替运行,而是顺序运行.
f_acme 2005-11-18
  • 打赏
  • 举报
回复
我也想知道原因,帮忙up一下.

62,614

社区成员

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

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