我有一个关于线程的问题。我有以下Thread类并创建2个线程对象。同步线程方法正在并发执行 - 为什么?
public class MyThread extends Thread{
String name="";
public MyThread(String string) {
name=string;
}
@Override
public void run() {
callMe();
}
synchronized private void callMe() {
System.out.println("Started");
for (int i = 1; i <= 5; i++) {
System.out.println(name+" = "+i);
}
}
public static void main(String[] args) {
MyThread a = new MyThread("A");
MyThread b = new MyThread("B");
a.start();
b.start();
}
}
当我执行此,输出我得到的是 -
Started
Started
B = 1
B = 2
A = 1
A = 2
B = 3
A = 3
B = 4
A = 4
B = 5
A = 5
我知道,当线程调度捡起来,A和B是随机打印。
但我的问题是:为什么循环不是一个接一个地执行?我已使用关键字。
因此,在你的第一个代码片段中,它不会保持Synchronized'method'正确吗?它变成Synchronized'语句'。第二个代码片段就是Synchronized'method'的一个例子,对吗? – 2014-10-08 11:36:52
@NinadPingale:是的,但这种差异实际上是不相关的 - “同步”方法实际上是一个包含方法体的'synchronized(this)'语句的普通方法。 (例如方法;对于静态方法,它在'Class'对象上同步。) – 2014-10-08 11:38:16