叫线程先睡上0.1秒,把CPU让给其他人,0.1秒后再醒来

解决方案 »

  1.   

    具体说来,java是垮平台的,有的平台的cpu线程处理方式是独占式,有些是时间片式,这些理论可以查阅操作系统原理相关,问题就出在这,为了使程序在各个平台间的运行一样,就有必要使用相关方法,使具有较高优先级的线程休眠,答到给其他线程运行的目的!否则在独占方式下,线程的执行独占式,只有当一个执行完,其他线程才有执行的机会!
      

  2.   

    在多线裎中因为涉及到同步,以及资源共享的访问是的互斥等原因。
    需要将线程调入睡眠,挂起等状态。相关的内容看看操作系统方面的书
    sleep(100)就是将线裎进入睡眠状态,给别的线程访问资源
      

  3.   

    我好像记得在c中,多线程不用调用sleep吧?
      

  4.   

    不用sleep理论上是没有问题的,但是你实际测试一下,有时候有一些线程得到的执行机会很少或没有
      

  5.   

    《thinking in java》正看到线程的部分,也有了同样的疑问
    谢谢大家了收藏
      

  6.   

    其实用sleep只是为了能够比较明显的看到线程运行的并发性,你不写这句话是没有问题的
    但是由于线程执行得太快了,所以一个线程可能会出现连续打印信息很多次才轮到
    别的线程执行得情况,这样不方便看到效果,所以才增加sleep得方法进去
      

  7.   

    to ChDw(米) :
      好像不对吧,在多线程编程中,不要sleep好像用户交互界面就反映得很慢.
      

  8.   

    楼上的,用户交互界面反应慢那是因为你的那个方法不是thread safe的,大家都要排队……swing的很多方法都是这样。至于提到sleep乐就能让线程们合理分配时间,这个观点我也不赞同,我自己就碰上乐这样的问题,我已经做了sleep可是仍然这个线程被优先分配时间乐--我并没有修改线程优先级别
      

  9.   

    sleep()是和优先级配合的.当sleep结束,高优先级的线程还是会得到cpu的使用权,
    一样用wait ,notify ,notifyAll来进行各线程间的同步!
      

  10.   

    将CPU时间让出来,让其它线程运行。
      

  11.   

    我觉得大家回答得还是不尽人意,我想问一下在run中加入sleep(100),那么此run方法是否就会慢0.1秒?
      

  12.   

    其实最好是使用yield()方法,效果和sleep()差不多,但不需要设置时间。Thread的永真循环消耗CPU资源一直是程序员的一大心病,如果在程序中不将线程让出来,而程序一直在跑的话,CPU使用率可能达到97%以上。所以在永真循环中,建议大家使用阻塞的方法。如Selector类的select()就是阻塞的,在注册的事件发生后,才返回结果,也可以用select(int i)方法,可以设置超时时间,如果在循环中还有其他事情要做,可以把时间间隔写在参数里,单位是毫秒。