我有以下代碼:主線程如何在此線程之前運行?
public class Derived implements Runnable {
private int num;
public synchronized void setA(int num) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.out.println("Setting value " + Thread.currentThread().getName());
this.num = num;
}
@Override
public void run()
{
System.out.println("In run: " + Thread.currentThread().getName());
setA(20);
}
public static void main(String[] args) {
Derived obj = new Derived();
Thread t1 = new Thread(obj);
t1.start();
obj.setA(32);
}
}
此打印:
In run: Thread-0
Setting value main
Setting value Thread-0
我的問題是,如果我開始線程「T1」第一,它進入了run方法的輸出顯示,如何如果對象被t1鎖定,主線程能夠在't1'之前調用setA嗎? (或者甚至在鎖定'obj'main之前能夠獲得鎖定)它只是調度程序還是我認爲它錯了?
除非您採取明確的步驟來同步它們,否則沒有關於使用線程排序的保證。這就是整個線程的重點,它們是異步的。 –
調用此代碼時,主線程已啓動並正在運行。你的另一個線程只需要一點時間來構建和運行,所以我對你看到的結果並不感到驚訝。再加上@JimGarrison上面陳述的。 –
你的代碼也不應該編譯 - 你的Runnable沒有'run()'方法。 –