[问题] 关于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