GV_*_*Qst 3 java multithreading
在Android中,我们有Handler#post(Runnable)方法可将一些代码从另一个代码发布到主线程
是否可以在纯Java中(例如在使用swing时)做同样的事情?
解释这个问题:假设我们有两个线程:ThreadA和ThreadB。两者都已经启动并且并排运行。并且ThreadB希望ThreadA调用某些方法(再次,ThreadA已经在运行)。
可选问题(您可能无法回答):如果有可能,有人向我解释了Handler在Android中的功能。如何将一些代码发布到MainThread?Looper的目的是什么?
解决您的其他问题:
您说“ 在Android中,我们有Handler#post(Runnable)方法可将一些代码从另一个代码发布到主线程中 ”
这并不完全正确。您可以将任何线程A的一些代码“发布”到任何线程B,前提是线程B初始化为a Looper,并且线程A引用Handler了目标线程B的a 。
当您需要在UI线程上执行某些操作时,这非常方便,因为UI线程已经有一个Looper,您几乎可以从任何地方检索它。静态方法Looper.getMainLooper是一种Looper为主线程获取a的方法。如果您Handler使用对此进行初始化,则Looper可以发布Runnable或向其发送Message(尽管您Runnable也将其包装在中Message),它将在UI线程上执行。
Looper顾名思义,,基本上是为线程运行一个非终止循环。在Looper具有相关联的MessageQueue,它不断地为新的检查Messages.通过的Handler初始化一个Looper你可以排队Messages在此线程。将Messages根据的when字段以顺序处理Message。
这是Looper线程的基本实现:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
Run Code Online (Sandbox Code Playgroud)
我建议您阅读Meike GB Android Concurrency的第5章。它将为您提供对Looper / Handler框架的全面了解。在阅读的同时浏览源代码也很棒,它非常简单且不言自明。
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |