黑马程序员技术交流社区
标题:
中断异常的问题
[打印本页]
作者:
ぺsimon☆
时间:
2013-4-23 01:05
标题:
中断异常的问题
本帖最后由 ぺsimon☆ 于 2013-4-25 23:10 编辑
class StopThread implements Runnable
{
private boolean flag=true;
public synchronized void run() //定义一个同步函数
{
while(flag) //如果flag等于true执行循环体
{
try{this.wait();}catch(Exception e){flag=true;} //处理异常
for(int x=0;x<60;x++)
{
System.out.println(Thread.currentThread().getName()+"---"+x);
}
}
}
public boolean ChangeFlag()
{
return flag=false; //返回 flag=false
}
}
class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st=new StopThread(); //创建对象
Thread t1=new Thread(); //创建一个线程t1
Thread t2=new Thread(); //创建一个线程t2
t1.start(); //开启线程t1
t2.start(); //开启线程t2
for(int x=0;x<60;x++)
{
if(x==59)
st.ChangeFlag(); //调用ChangeFlag()方法
t1.interrupt();//调用interrupt()方法,结束线程的冻结状态
System.out.println("main-----"+x);
}
}
}
复制代码
问题:
代码:
t1.interrupt();//调用interrupt()方法,结束线程的冻结状态
interrupt()方法有异常抛出,看视频的时候老师说在同步函数上面已经try,catch了
异常就不用再处理了为什么呢?
按照我的理解是调用的方法有异常抛出要不自己try,catch处理,要不就抛,
为什么在同步函数
while(flag) //如果flag等于true执行循环体
{
try{this.wait();}catch(Exception e){flag=true;} //处理异常
里处理了就不用处理了呢?
作者:
harborbest
时间:
2013-4-24 23:36
抛异常一般用这俩个关键字throws和throw。一个是在类里抛,一个是在方法里抛。而try,catch是捕获异常自己来处理的!如果处理不了在再把这个异常链传递下去。也就是再throw一次。
作者:
杨同旺
时间:
2013-4-25 22:41
wait()方法会抛出异常,所以必须处理,
但是wait()又处在run()方法中,所以处理是只能try,不能抛,因为Runnable接口中的run方法没抛异常,
wait()声明是要抛出异常的,经过try处理后,就相当于不再向外抛出异常了,因为异常被catch捕获了,就不向外抛了
所以run方法也不用处理了
作者:
黄玉昆
时间:
2013-4-25 23:04
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2