Runnable 是一个简单的接口,根据 Java 文档 http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html, "应该实施由实例为的任何类旨在由线程执行.”(强调我的。)
例如,按如下方式定义 Runnable 将简单地在创建它的同一线程中执行它:
new Runnable() {
@Override
public void run() {
Log.d("Runnable", "Hello, world!");
}
}.run();
请注意,您实际上在这里所做的只是创建一个类并执行其公共方法run()
。这里没有什么魔法可以使它在单独的线程中运行。当然没有;可运行只是一个三行代码的接口 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/lang/Runnable.java!
将此与实现 Thread(实现 Runnable)进行比较:
new Thread() {
@Override
public void run() {
Log.d("Runnable", "Hello, world!");
}
}.start();
这里的主要区别是 Thread 的start()
方法负责生成新线程并执行 Runnable 的逻辑run()
在里面。
Android的AsyncTask进一步促进了线程执行和回调到主线程,但概念是相同的。