帮忙解释一下这道题的执行过程(同步问题)
1. class Z {
2. public static void main(String[] args) {
3. new Z();
4. }
5.
6. Z() {
7. Z alias1 = this;
8. Z alias2 = this;
9. synchronized(alias1) {
10. try {
11. alias2.wait();
12. System.out.println("DONE WAITING");
13. }
14. catch (InterruptedException e) {
15. System.out.println("INTERRUPTED");
16. }
17. catch (Exception e) {
18. System.out.println("OTHER EXCEPTION");
19. }
20. finally {
21. System.out.println("FINALLY");
22. }
23. }
24. System.out.println("ALL DONE");
25. }
26. }
Mutiple:
1) Compiler error.
2) The application compiles but doesn't print anything.
3) The application prints "DONE WAITING".
4) The application prints "INTERRUPTED".
5) The application prints "OTHER EXCEPTION".
answer:2
问题点数:20、回复次数:4Top
1 楼zhouwj(阿杰)回复于 2004-09-03 11:40:32 得分 10
先将alias1和alias2处都替换this。
synchronized(this):将线程(1)锁住。
this.wait():让线程(1)等待。
因此JVM的进程就没有让线程(1)再执行下去了。直到线程(n)notify()线程(1)为止Top
2 楼wk0210(wk0210)回复于 2004-09-03 13:25:24 得分 0
哦,大概明白了。可理解的还不是很深刻。线程同步这块总感觉不太明白。Top
3 楼liweigu(liweigu)回复于 2004-09-03 13:28:49 得分 0
Z要从Thread继承吧Top
4 楼xyxu1982(云娜)回复于 2004-09-03 15:52:43 得分 10
自始至终都只有一个线程,你在11行无论是wait(),alias1.wait(),还是alias2.wait()都将使程序停止运行。程序会从main方法开始运行(也就是所谓的主线程),这时只有一个线程除非有new Thread()代码,也只有new Thread()会产生一个新的线程。
to wk0210(wk0210):
建议你以后问问题不要先给出答案或者给错的答案,要不然有些人会照着答案乱解释误导你。还有你那个overriding问题答案真的有3个。Top




