public class T()
{
public static void main(String args[])
{
T t1= new T();
T t2= new T();
synchronized(t1)
{
try{
t2.wait();
System.out.println("first line");
}
catch(InterruptException e)
{
System.out.println("INTERRUPT");
}
catch(Exception e)
{
System.out.println("EXCEPTION");
}
finally
{
System.out.println("FINALLY");
}
}
System.out.println("last line");
}
}
请问输出结果,及为什么。
这个程序关键是synchronized这个关键词看看程序synchronized(t1) 即t1被锁,而 t2 没有受到限制,可能导致多线程程序调用混乱。
t2.wait()执行的时候t1受锁的限制必然出错产生异常。
Exception肯定是会输出的,只要有异常肯定会输出这一句。
然后开始研究InterruptedException 这个异常是sleep wait等方法被取消执行时产生的异常,这里t2继续执行wait()不受影响,不产生InterruptedException异常。
最后就算不懂多线程也也可以肯定最后输出的两句
[code="java"]FINALLY
last line [/code]
好吧 就这些 。。。
稍微写个多线程程序运行一下嘛 。。。
[code="java"]
EXCEPTION
FINALLY
last line
[/code]
为什么 。。。 我再看看程序
注意 程序中这个写错了 InterruptException==>InterruptedException
这个一直不会有输出,就一直wait在那里了.
因为根本就只有main一个线程。
而且
synchronized(t1){
t2.wait()
}
这种方式也是非常有问题的,一般情况下wait和synchronized的对象要是同一个才能避免同步问题。
一直wait? :x
好像是我理解题目错误...嗯 好像是 8)