StackOverflowError 的问题

dzbkq_110 2016-07-24 01:48:28
0基础正在学习java,遇到一个线程出现Exception in thread "main" java.lang.StackOverflowError,各位大侠帮忙看看是怎么回事。我想让次线程sleep,但是我用Runnable接口,所以我new了一个实例,然后就出现这样的情况了。怎么样保证Runnable接口存在的情况下,使用sleep呢?我在网上查了StackOverflowError问题,说是有死循环。以下为代码。
public class EqualsTest {
public static void main(String[] args) {
Runner1 r=new Runner1();
Thread t= new Thread(r);
t.start();
for (int i = 0; i < 100; i++) {
System.out.println(i);
try {
t.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Runner1 implements Runnable{
Runner1 ss= new Runner1();
Thread s =new Thread (ss);
public void run(){
for (int i = 0; i <200; i++) {
System.out.println("Runner1="+i);
try {
s.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

...全文
95 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzq584462393 2016-07-25
  • 打赏
  • 举报
回复
引用 2 楼 dzbkq_110 的回复:
谢谢,改过来了,程序能运行了我为什么错了啊,我要知其然也要知其所以然啊。 sleep是static方法,我用对象是错了,但是为什么能用Thread.sleep()啊?送佛送到西吧
Thread.sleep就像你说的是static方法,就可以用,是本线程睡眠多长时间,你这个报错的主要原因是 在Runner1中还有本身的对象Runner1 ss= new Runner1(); Thread s =new Thread (ss);才导致报错的,这2句其实没有什么作用,但是具体原因,我也不算太清楚,应该是线程内部实现,不让这么写吧
dzbkq_110 2016-07-24
  • 打赏
  • 举报
回复
谢谢,改过来了,程序能运行了我为什么错了啊,我要知其然也要知其所以然啊。 sleep是static方法,我用对象是错了,但是为什么能用Thread.sleep()啊?送佛送到西吧
dzq584462393 2016-07-24
  • 打赏
  • 举报
回复
Runner1中的s.sleep(100);改为Thread.sleep(),并且把Runner1的 Runner1 ss= new Runner1(); Thread s =new Thread (ss);删除

62,614

社区成员

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

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