我有一個關於線程的問題。我有以下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