线程抛异常的问题

GatoAngel 2008-07-04 12:04:26
先看代码:
public class ThreadSleep implements Runnable {
Random rs = new Random();
int i = rs.nextInt() % 9 + 1;

public void run() {
System.out.println("线程开始:");
try {
Thread.sleep(i * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("休眠了" + i + "秒钟");
}

}
启动这个线程.60%会抛出如下异常:
线程开始:
Exception in thread "pool-1-thread-1" java.lang.IllegalArgumentException: timeout value is negative
at java.lang.Thread.sleep(Native Method)
at cai.zhi.huan.ThreadSleep.run(ThreadSleep.java:12)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
但还有40%会正常运行:
线程开始:
休眠了1秒钟
请问.正常吗.?
如果用循环同时启动10次.那么99.9%会抛出异常.如果正常..那线程还有什么用?....
...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
GatoAngel 2008-07-06
  • 打赏
  • 举报
回复
原来如此//谢谢各位了/
aunty_flybird 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lzx6169936 的回复:]
貌似nextInt不会返回负数
[/Quote]

不知者无罪,但是不知又胡说就不该了,不确认的事情为何不去试着确认下呢?
  • 打赏
  • 举报
回复
rs.nextInt() 换个别的函数 (太多了 楼主自己找)
lzx6169936 2008-07-04
  • 打赏
  • 举报
回复
貌似nextInt不会返回负数
zidasine 2008-07-04
  • 打赏
  • 举报
回复
学习了
老紫竹 2008-07-04
  • 打赏
  • 举报
回复
nextInt 有可能返回负数的。

你可以用 nextInt(9) 来限制一下!
vtudiv 2008-07-04
  • 打赏
  • 举报
回复
i可能是负数。
samzheng99 2008-07-04
  • 打赏
  • 举报
回复
rs.nextInt() 会产生负数,rs.nextInt(10)+1可以保证产生1~10之间的整数。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧