各位,我的主要意思是,我用Thread.sleep(1000),之后,操作系统不是进程轮转么,JAVA程序是如何知道1000s后的它一定系统给它资源让它活过来呢?我的猜想:系统进程轮转的时间片很短暂,小于1ms,所以,如果以1ms为单位,系统一定会轮转到java程序,是这样么?求大神指点

解决方案 »

  1.   

    有点这么个意思,但实际上轮转时间片远远短于 1ms。另外操作系统处理的时候,主要是在就绪状态的队列中调度线程的,而sleep的线程是在sleep完毕后,才进入就绪队列,然后等待操作系统调度。
      

  2.   

    我想系統有一個計時不間斷的時鐘,在java進程時間片獲得輪轉執行時,查詢系統時鐘當前時刻并記錄,每次獲得執行時查詢是否時差超過1秒,直到剛好等於或大於1秒,這樣時間就不會受到輪轉時間片的誤差影響。
      

  3.   

    轮转算法只是其中一种,也有可能是过一秒后重新加到就绪队列中而已。
    1秒对CPU来说,太长了。知道主频1G,2G是什么概念吗?时间频率
      

  4.   

    应该不会非常非常精确的,不过对于人的感觉来说,误差在可接受范围之内,当然如果编写异常精细的程序,java可能不合适了