首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

有一道线程有关问题想不通,望大家指点下

2011-12-31 
有一道线程问题想不通,望大家指点下publicclassTestThreads{privatestaticObjectresourcenewObject()pri

有一道线程问题想不通,望大家指点下
public   class   TestThreads{
private   static   Object   resource   =   new   Object();
private   static   void   delay(long   n){
try{
Thread.sleep(n);
}catch(Exception   e){
System.out.print(Thread.currentThread().getName()   +   "Error   ");
}
}
public   static   void   main(String[]   args){
System.out.print( "StartMain   ");
new   Thread1().start();
delay(1000);
Thread   t2   =   new   Thread2();
t2.start();
delay(1000);
t2.interrupt();
delay(1000);
System.out.print( "EndMain   ");
}
static   class   Thread1   extends   Thread{
public   void   run(){
synchronized(resource){
System.out.print( "Start1   ");
delay(6000);
System.out.print( "End1   ");
}
}
}
static   class   Thread2   extends   Thread{
public   void   run(){
synchronized(resource){
System.out.print( "Start2   ");
delay(2000);
System.out.print( "End2   ");
}
}
}
}

打印的结果是:StartMain   Start1   EndMain   End1   Start2   Error   End2
问题是,Error为什么会打印出来?应该是由main方法中调用了t2.interrupt()语句导致Thread2线程捕获到一个InterruptedException,从而打印出Error,但是从结果中可以看出,EndMain在Start2之前打印,说明Main方法在线程Thread2执行前就已经结束了,怎么t2.interrupt()语句还好产生作用呢?

问题长了点,但应该不复杂,请大家耐心看下,谢谢指点

[解决办法]
main虽然结束了,但Java虚拟机并没结束
[解决办法]
Thread t2 = new Thread2();
t2.start();
线程2已经启动,不过在等待同步锁,
主线程调用 interrupt就置了一个中断标志,以后线程2调用sleep方法就会抛出异常,不需要在
sleep的时候中断才抛出异常。

热点排行
Bad Request.