创建新线程是否会阻止CPU将线程的资源用于其他目的?

时间:2017-11-17 17:10:06

标签: java multithreading timer thread-sleep

如果我创建一个线程来异步执行一个任务,并且在这个线程中我需要等待其他一些事件,调用Thread.sleep()1秒和创建一个计时器对象来检查回来是否有区别一秒钟等待这个事件?线程是否通过创建新线程来保留线程?如果是这样的话,这两种实现之间有什么区别吗?或者CPU是否可以自由地利用线程的资源,直到计时器恢复运行?

编辑: 通过资源,我指的是缓存,还有cpu本身作为资源的处理能力。当您在线程中等待计时器时,cpu可以继续执行其他操作吗?我知道做thread.sleep会暂停线程,但是如果线程中没有其他操作,thread.sleep()和在该线程中创建一个定时器之间有什么区别吗?操作系统在等待定时器时是否将线程提供给其他进程,还是保留?

1 个答案:

答案 0 :(得分:0)

我遇到的困惑是Thread.Sleep()没有像我想象的那样阻塞。由于这个原因,我的问题可能很难理解。

我对Arduino的经验是,当我打电话给睡眠时,这会阻止所有的执行。通常,更好的方法是创建一个计时器并稍后返回。在Java中,Thread.sleep()与

不同
While(currentTime < (startTime + miliseconds) {
  //do nothing
}

Thread.sleep()允许CPU的核心继续进行其他操作。

创建一个新线程只会创建一个代码块,处理器将按照与当前执行线程无关的时间顺序执行。它不会从CPU中保留任何内容。只有当CPU无法立即执行所有请求的线程时才会出现问题。