Android / Java线程在睡觉

时间:2012-04-27 10:37:32

标签: java android multithreading concurrency concurrent-programming

除了隐式用户界面线程之外,我还创建了两个线程(runnables),它们都有一个while循环,我在其中定期检查我已实现的消息队列中的更新。

最初的问题是两个while循环是无限的,它们变化得如此之快,以至于它们几乎耗尽了设备的所有CPU。 所以我想在每个循环后让while循环睡眠大约100毫秒,让其他线程完成他们的工作,但我遇到了另一个问题:

现在,问题是线程睡眠时间为100毫秒,但是在这段时间内它们不会让UI线程工作:(这样做会让UI变得迟钝。当我在屏幕上拖动某些东西时它会滞后一点。

所以我想做的是让这些线程(这些循环)每隔100毫秒检查一次消息队列标志,但是在那100毫秒内我想让UI线程运行。如何实现这一目标?

编辑1

我找到了yield方法,它停止了当前线程的运行,但是什么时候调用呢?我需要调用sleep线程,同时让它以某种方式产生...... ??

编辑2

这两个类是单例,我从应用程序的第一个Activity启动它们,所以当应用程序启动时(UI线程)

//Obtain object of singleton classes
ControllerSingleton controller = ControllerSingleton.getControllerSingleton();
OpponentSingleton opponent = OpponentSingleton.getOpponentSingleton();

//Start threads
/*--------CONTROLLER----------*/
Thread t;
t = new Thread( controller );       
t.setName("ControllerThread");
Log.i("Remy","Starting Controller thread...");
t.start();

/*--------OPPONENTS----------*/
t = new Thread( opponent );     
t.setName("OpponentThread");
Log.i("Remy","Starting Opponent thread...");
t.start();

在每个run()内,我有下一个代码:

public void run() 
{
   while( true )
   {
      //Check if any messages in the queue
      if ( queueEmpty() == false )
      {
          //Do something ...              
      }
      /*HERE IS WHERE I WOULD LIKE TO TELL THE THREAD TO STOP AND WAIT FOR 100 ms*/
   }
}

1 个答案:

答案 0 :(得分:3)

我认为您需要使用的是Handler。例如,您可能希望看到this tutorial