开发者社区> 问答> 正文

关于线程的一个小细节:报错

      请问线程中,实现Runnable接口这个类中不是run方法体里面的Thread.sleep()这个方法,主线程调用这个方法时有效?

      我个人认为是无效的,不知道对不对。问下大家。

展开
收起
kun坤 2020-06-14 16:09:52 479 0
1 条回答
写回答
取消 提交回答
  • 读了三遍,愣是没读懂楼主想说啥。######@java_zf 我现在在做的一个项目用到了多线程,我就在项目中子线程调用的一个函数中加了个sleep。你可以写个简单的代码试一下,应该比较简单。你试验的结果不一样吗?我这个项目是Linux下的。######我看下你的代码。######刚试了下,不在run中也有效。######扼,呵呵 其实就是不在run方法体中的Thread.sleep()这句话是有效的呢还是无效的呢?######不在自建线程,就在主线程,肯定是有效的吧######

    不加 不就无效么

    ######

    引用来自“zcj”的答案

    读了三遍,愣是没读懂楼主想说啥。
    回复 @zcj : 不一样,我的就是一个类实现了Runnable接口,然后它有3个方法,一个是主函数,一个run方法,一个是test方法。首先主函数里面实例化这个类,然后实例化Thread将这个类传给Thread然后start()开启一个线程,  这个线程就会执行那个run的方法体,所以run的方法体中的Thread.sleep会执行,而用实例化类的引用调用那个test方法时,并不会执行那个Thread.sleep(),所以我才这么认为的,不知道你看明白我说的了么?
    ######回复 @java_zf : 那sleep就没用了######回复 @zcj : run没有调用test呢?######我是用C语言试的。你的例子中如果run调用了test的话sleep应该会有作用的。Java中创建线程start后新线程只会调用run方法,也就是说run就相当于新线程的main函数。######

    我也没读懂是什么意思。

    ######

    不是太熟悉java的线程,但是想到一些问题:

    Thread 的start方法 会新启动一个 线程 ? 那么原来的main函数 是不是 也运行在另外一个线程里面, 所以现在有两个线程, 主线程 和 新启动的线程

    而run方法中的调用Thread.sleep() 是会使哪个线程sleep掉呢?

    ######子线程会sleep,主线程不会, 但是若调用子线程对象.sleep()方法, 则子线程不会sleep,而主线程会sleep。 我以为该帖子是在这个经典问题呢,但是现在看好像不是。######

    看不懂到底问的是啥。

    Thread.sleep()  让当前运行的线程停下来。

    ######很HIGH的进来,很失望的留言。。
    ######使用了同一把锁的问题。
    2020-06-14 16:09:59
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
fibjs 模块重构从回调到协程 立即下载
fibjs 模块重构从回调到协程--陈垒 立即下载

相关实验场景

更多