同步问题

And*_*ler 4 java multithreading synchronization

  public class PingPong implements Runnable {
      synchronized void hit(long n) {
          for (int i = 1; i < 3; i++)
              System.out.print(n + "-" + i + " ");
      }
      public static void main(String[] args) {
          new Thread(new PingPong()).start();
          new Thread(new PingPong()).start();
      }
      public void run() {
          hit(Thread.currentThread().getId());
      }
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了输出8-1 9-1 8-2 9-2
但是当功能同步时,它应该给出输出8-1 8-2 9-1 9-2或9-1 9-2 8-1 8-2
有人可以解释一下吗?

Arn*_*len 7

方法上的"synchronized"同步该方法对特定对象的所有访问.

因此,如果您有1个PingPong对象,则没有2个线程将同时进入其hit方法,但是对于2个对象,一个线程可以进入hit其中一个对象的方法,而另一个线程运行另一个hit对象的对象.

这是有道理的,因为您通常用于synchronized确保不受干扰地访问当前对象的本地内容.如果您的对象代表某些线程有时需要不受干扰访问的外部实体,请将您的对象设为单例.