发送循环线程消息java / android

时间:2012-05-16 12:34:06

标签: java android multithreading loops message

所以我有以下主题:

  public class MyThread extends Thread
{
  Handler cHandler;
 private boolean looprunning = false;
  MyThread() {
  cHandler = new Handler();
          looprunning = true;

  }

  @Override
  public void run(){
      while (looprunning) {
          //do stuff here
        //update another system here or something else.
      }
  }

}

在这个线程的while循环中,我想运行一个Runnable,当线程在while循环中循环时,我传递给线程。我该怎么做?

3 个答案:

答案 0 :(得分:2)

首先请将looprunning标记为易失性,以获得正确的线程可见性

你可以使用队列

Queue<Runnable> taskQueue = new ConcurrentLinkedQueue<Runnable>();
@Override
public void run(){
   while (looprunning) {
       //do stuff here
     //update another system here or something else.
     Runnable r = taskQueue.poll();
     if(r!=null)r.run();
   }
} 

您可以使用您选择的(线程安全)队列

答案 1 :(得分:1)

Android已经提供了一种机制来创建在执行Runnables的循环中运行的线程。看看HandlerThread

答案 2 :(得分:0)

你这样做就像你在run方法中编写的任何计算一样,当它完成时向处理程序发送消息和任何UI相关的事情,比如改变UI,就像我在做progressdialog dismiss(); 还有一件事,如果尝试在运行中改变UI,你肯定会得到泄漏窗口错误,因为你试图在非UI线程中更改UI。

final Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {


            dialog.dismiss();

        }

    };



            dialog = ProgressDialog.show(NewTransaction.this, "",
                    "Loading Meters...", false);

            new Thread() {

                public void run() {

                    while(Condition){

                                  do Something
                                 }
                    handler.sendEmptyMessage(0);

                }

            }.start();