Java 用于在其他线程中运行的可运行程序队列

Java 用于在其他线程中运行的可运行程序队列,java,android,multithreading,thread-safety,Java,Android,Multithreading,Thread Safety,该代码将帮助我解释我的问题: public class TestHandlerActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main)

该代码将帮助我解释我的问题:

public class TestHandlerActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    new  Thread(){
        public void run(){
            for (int i=0;i<20;i++){
                handler.post(run);
            }
        }
    }.start();
}

Handler handler=new Handler(){

};

Runnable run = new Runnable(){
    public void run(){
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d("TAG", "Message processed");
    }
};
}
公共类TestHandlerActivity扩展了活动{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
新线程(){
公开募捐{

对于(int i=0;i一个选项是使用它来制作线程:

这将创建一个具有自己的消息队列和循环的线程。您可以创建一个处理程序来运行线程上的工作,如下所示:

HandlerThread handlerThread = new HandlerThread("My Handler");
handlerThread.start();
Handle myHandler = new Handler(handlerThread.getLooper());

这确实需要线程完成的所有工作都通过发送消息和通过处理程序在其上调度可运行项来完成。

查看一个从队列中退出的工作线程。您可以使用其中一个并发队列,例如ConcurrentLinkedQueue。感谢您的快速回答Steven,我开始了多线程。我已经检查了ConcurrentLinkedQueue,似乎有一个线程在(true){if(queue.pool()!=null)/*时执行,所以pool*/}的某些东西可以解决我的问题,但不是CPU最优的。你能解释我如何改进它吗?谢谢!听起来不错,谢谢你的回答。当我的应用程序在前台时,我需要这个处理程序,我应该调用handlerThread.quit()当它进入后台?或者不需要时?如果你愿意,你可以退出它。但通常情况下,没有理由不让它留在那里,这样你就可以在用户下次返回你的应用程序时继续使用它。