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
有人可以解释一下吗?
方法上的"synchronized"同步该方法对特定对象的所有访问.
因此,如果您有1个PingPong对象,则没有2个线程将同时进入其hit方法,但是对于2个对象,一个线程可以进入hit其中一个对象的方法,而另一个线程运行另一个hit对象的对象.
这是有道理的,因为您通常用于synchronized确保不受干扰地访问当前对象的本地内容.如果您的对象代表某些线程有时需要不受干扰访问的外部实体,请将您的对象设为单例.