写一个线程,是一个while死循环,在线程里面用了sleep(2000)方法但是实际的时间都会达不到效果
比如上一个项目中,我写sleep(5000),实际只有1秒的样子现在我写sleep(1000),直接不休眠代码如下:boolean key=true;
while(key)
{
    Log.d("","");
    sleep(2000);
}
求解答为何,并且如何实现暂停
还有,貌似我直接调用线程的stop方法也有问题,比如Thread p = new Thread()
{
}p.start();if(p.isAlive())
p.stop();求解答

解决方案 »

  1.   

    sleep()的时间是不能保证的;
    stop()是Deprecated的:这种方式停止线程是不安全的,会使应用程序和VM的状态不可预知
      

  2.   

    这2个问题都是兼容性的问题,stop已经明确被淘汰,sleep方法不稳定sleep改用wait,例如sleep(5000)改用synchronized(this)
    {
    try
    {
    wait(5000);
    }
    catch (InterruptedException e)
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
      

  3.   


    我有用一个key来控制while,我就是单纯想问问
      

  4.   


    我开始就是用的这个,但是发现用了这个根本不会暂停我是在一个service里面,建立了一个thread,thread的run里面是一个while循环,循环内部这样写的
      

  5.   

    wait已经释放了锁,超时后不一定立刻就能执行啊
      

  6.   

    JDK的java.util.concurrent中提供了大量的方法去控制一段代码定时执行,用ScheduledExecutorService试试。
    [java example]你还在使用while(true) Thread.sleep吗?
      

  7.   


    但是有个疑问阿如果像这样说,wait释放了锁,超时后不一定能执行那么导致的结果应该是,while就不执行了,卡这了,但是我得到的结果是他根本没停阿
      

  8.   

    如果在多线程中,有优先级比当前的高,就不会执行了。
    如果没有优先级比它高的,就会执行,要看cpu调度了。