作者LoserOfLove (LOL)
看板java
标题[问题] 关於synchronized
时间Mon Nov 23 17:33:13 2015
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 这样的输出
先谢谢各位的解答了~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.218.53.221
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1448271196.A.B38.html
1F:→ ssccg: 非static method是对各instance lock,不同instance分开的 11/23 17:37
2F:→ cha122977: 实际上3个run会被视为不同function 11/23 18:50
3F:→ LoserOfLove: 谢楼上的回答,那麽我要如何在一个instance开三个 11/23 20:42
4F:→ LoserOfLove: thread跑run()呢? 11/23 20:43
5F:→ cha122977: 在run里面呼叫同一instance的function就可以了 11/23 21:06
6F:→ ssccg: 如果你这段需要对同class所有instance同步,可以直接 11/23 23:32
7F:→ ssccg: synchronized (Test.class) { } 包住那段,或是独立出来成 11/23 23:33
8F:→ ssccg: static synchronized method 11/23 23:35
9F:→ ssccg: 如果是要在多个Thread跑同一个instance的run,那这个class 11/23 23:36
10F:→ ssccg: 不要继承Thread,实作Runnable再传进new Thread()就好 11/23 23:37
11F:→ LoserOfLove: 了解了,谢谢两位的帮忙~ 11/24 00:53