黑马程序员技术交流社区
标题:
多线程小问题!!求解释下
[打印本页]
作者:
余松霖
时间:
2011-12-17 15:16
标题:
多线程小问题!!求解释下
本帖最后由 余松霖 于 2011-12-17 16:28 编辑
public void run()
{
while(true)
{
synchronized(obj)
{
if(Tick>0)
{
try{Thread.sleep(1);}catch(Exception e){};
System.out.println(Thread.currentThread().getName()+".......卖票:......."+Tick--);
}
}
}
}
复制代码
中间为什么要这样try{Thread.sleep(1);}catch(Exception e){}; 直接Thread.sleep(10) 这样会有异常吗
作者:
宋双
时间:
2011-12-17 15:24
sleep
public static void sleep(long millis)
throws InterruptedException
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。
使用sleep这个方法时,默认代码是抛出了异常,所以使用时必须自己处理活着再次抛出,如果不这样做,会发生异常时会出错。按照毕老师的话就是 挂了、、
作者:
马伟奇
时间:
2011-12-17 15:41
public static void sleep(long millis)
throws InterruptedException
这个方法会抛出异常
作者:
闫江龙
时间:
2011-12-17 16:38
thread.sleep()是让线程休眠,也就是暂时中断线程 ,在中断过程中难免会出现异常,
比如说你可能调用interrupte来终止线程,这样就会抛出InterruptException,只有捕获异常进行处理,才能正确的终止线程
如果你是用记事本编程的话不进行抛出,程序会报错
在使用一些软件编写的时候,一般都会提醒你抛出异常。
作者:
应国炎
时间:
2011-12-17 16:46
你调用了 Thread.sleep()方法,该方法里面有抛出异常,且这个异常好象不是RuntimeException里的成员,所以需要处理。
处理方法有2个,一个是继续抛,再一个就是try了。
因为类中会有覆盖等子父类方面的问题,如果继承的父类中没有该异常,则子类是不能抛出的。 所以一般都是用try直接处理掉
作者:
舒远
时间:
2011-12-18 13:35
sleep方法的声明很明确标出了会抛出:InterruptedException,这个异常是checked异常也就是非运行时异常。那么在代码中调用sleep方法是就必须进行捕获或者继续向外抛出。而Thread类中的run方法没有声明抛出异常。那么Thread的子类就不能抛出异常。所以在你的代码中就只能进行try catch的捕获。这是语法上的规则,必须这么做的、否则无法通过编译。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2