使用一个synchronized(this)而不是两个?

时间:2016-05-24 20:20:35

标签: java multithreading

这是:

synchronized (this)
{
  fork[i] = false;
  notifyAll();
}
synchronized (this)
{
  fork[j] = false;
  notifyAll();
}
System.out.println("Phil" + id + "released the forks");

与此相同吗?

synchronized (this)
{
  fork[j] = fork[i] = false;
  notifyAll();
}

System.out.println("Phil" + id + "released the forks");

我想知道是否只有一个同步的问题,谢谢

1 个答案:

答案 0 :(得分:0)

在第一种情况下,fork [i]和fork [j]可能不会在#34;同时#"中取错值。

在第二种情况下,fork [i]和fork [j]将在同一个关键部分中取两个false。

如果可能出现问题取决于您的意图。