当前位置: 首页 > 知识库问答 >
问题:

为什么有时,在线程中,您必须在run方法中将睡眠置于循环中?

麹权
2023-03-14

很多次我看到在一些示例解决方案中,如果它说每秒停止线程,创建者在run方法中做了这样的事情:

while(true){
    try{
       sleep(1000);
     }catch{...}
    //And following everything inside, what the run method should execute
}

所以在一个无限执行的while循环中。否则,我也看到了这一点:

//codethat should be executed

try{
    sleep(1000);
}catch{...}
//(Without while loop, only in try catch block)

为什么有时他们把睡眠方法放在一个循环中,而有时不放在一个循环中?

在一些解决方案中,代码的创建者将睡眠放在循环中,然后我删除了循环,代码停止工作。在其他不在循环中的情况下,我将其放入循环中,代码会导致错误。。。。为什么?

我怎么知道什么时候必须把它放在一个循环中?

共有1个答案

舒仲渊
2023-03-14

在这些示例代码中,睡眠主要用于演示线程并行工作的模拟。如果没有使用睡眠,那么我们将无法区分代码是在主线程中运行还是在其他线程中运行。

此外,将睡眠置于其中会使线程等待1秒,然后无限期地执行代码。线程不会终止并以固定的间隔无限期运行相同的操作。但当不使用循环时,代码只运行一次,线程等待1秒并终止。因此,它主要是关于另一段代码的执行。

 类似资料:
  • 问题内容: 这段代码: 使我的计算机挂起5秒钟,然后打印出0-9,而不是每半秒打印一次数字。难道我做错了什么? 问题答案: ,默认情况下,在内部打印到并缓冲要打印的输出。 通常是否由文件确定输出是否被缓冲,但是如果关键字参数为true,则将强制刷新流。 在版本3.3中更改:添加了关键字参数。 报价文件, 交互式时,标准流是行缓冲的。否则,它们像常规文本文件一样被块缓冲。 因此,就您而言,您需要像这

  • 我试图运行四个线程。run()方法有一个循环10次的for循环。在每个循环中,共享资源“x”递增1。当所有线程都死时,for循环应该运行4x10=40次,x值应该等于40。 这并不是在我的所有代码运行中都会发生的。每次我运行代码时,它都会打印不同的x值。x的大多数输出值都在33到40之间。 为什么不是每次都是40?这是否意味着跳过了一些for循环?是否由于被阻止而导致? 注意:这不会发生在睡眠()

  • 题目描述 如题 题目来源及自己的思路 子线程修改condition值为false,run方法while循环终止。 相关代码 粘贴代码文本(请勿用截图) 你期待的结果是什么?实际看到的错误信息又是什么? 期待:打印一段".."后打印"退出"。 实际:持续打印"..",不会打印"退出"。

  • 在上面的代码中,为什么在< code>main()中强制提到< code>String args[]以及为什么我们得到< code > "[ljava . lang . String;@174e5edb"作为输出?

  • 如果我有时运行这些程序,它会在打印“玩家赢”或“玩家输”后继续运行,我可以找到原因。。 这里的输出: 球员滚轴3 2=5 分数是5 玩家滚轮6 4=10 游戏者滚轴6=12 玩家滚轮5 5=10 球员滚轴12=3 球员滚轴1 3=4 球员获胜 球员滚轴4 6=10 球员滚轴4 1=5 构建成功(总时间:0秒)

  • 我正在调用while循环内的线程Hibernate1秒。当标志为true时,循环将运行(标志为true无限时间)。在循环内,线程应Hibernate1秒,唤醒并增加计数器,检查IF条件,如果为FALSE,则应再次Hibernate1秒并继续29次。在第30次迭代中,IF条件为true,IF语句中调用的方法将收集并存储数据。最后,在第32次迭代中,第二个IF语句将把存储的数据发送到服务器,并将计数设