[問題] 關於synchronized

作者: LoserOfLove (LOL)   2015-11-23 17:33:13
public class Test extends Thread {
char name;
Test(char a) { name = a; }
public synchronized void run() {
for (int i=0; i<3; i++) {
System.out.print(name);
}
}
public static void main(String[] args) {
new Test('A').start();
new Test('B').start();
new Test('C').start();
}
}
synchronized的作用不是讓同時間只能一個thread執行method嗎?
因此某個thread進入run()執行後
for迴圈三次應該要跑完才會被其他thread搶到執行權嗎?
想請問為何run()加了synchronized
還是會得到 AACCCBBBA 這樣的輸出
先謝謝各位的解答了~
作者: ssccg (23)   2015-11-23 17:37:00
非static method是對各instance lock,不同instance分開的
作者: cha122977 (CHA)   2015-11-23 18:50:00
實際上3個run會被視為不同function
作者: LoserOfLove (LOL)   2015-11-23 20:42:00
謝樓上的回答,那麼我要如何在一個instance開三個thread跑run()呢?
作者: cha122977 (CHA)   2015-11-23 21:06:00
在run裡面呼叫同一instance的function就可以了
作者: ssccg (23)   2015-11-23 23:32:00
如果你這段需要對同class所有instance同步,可以直接synchronized (Test.class) { } 包住那段,或是獨立出來成static synchronized method如果是要在多個Thread跑同一個instance的run,那這個class不要繼承Thread,實作Runnable再傳進new Thread()就好
作者: LoserOfLove (LOL)   2015-11-24 00:53:00
了解了,謝謝兩位的幫忙~
作者: n3oanderson (wake up ...)   2015-11-24 12:52:00

Links booklink

Contact Us: admin [ a t ] ucptt.com