[英]Anonymous class extending thread in Java
这是一个Java语法问题,但仅出于某些背景。
使用android,我创建了一个很小的应用程序,运行非常缓慢,并且经常崩溃,因为单击按钮时,onClick()方法更改了各种按钮的按钮图像。 这确实很笨拙而且很慢,我在网上搜索后发现问题很普遍,并且在onClick()方法中更改许多图像时,最好将它们放在单独的线程中。 一位善良的人为此提供了代码。
new Thread(new Runnable() {
public void run() {
quest.post(new Runnable() {
public void run() {
correct = nextQ();
}
});
}
}).start();
nextQ()方法和“ quest” TextView是我的。 这与我的问题做什么无关紧要,但是nextQ进行数据库搜索并更新图像,并且在线程外运行它确实很慢且很崩溃。 现在,我将此代码复制并粘贴到我的代码中,并且运行良好。 一个快乐的结局。 但是我不习惯使用我不理解的代码。 而且我不太了解Java。 因此,我尽了最大的努力研究匿名内部类,但是我仍然对代码感到困惑。
因此,匿名类扩展了线程,并且它的参数使用了一个匿名类,实现了可运行的,其中放置了代码的“肉”。问题:1)为什么要这样做? 我可以理解使用线程OR可运行,但是为什么要一起使用呢? 2)如何运作? 我回到了线程和可运行的基础知识,但是我看不到您如何以这种方式一起使用它们。
因此,匿名类扩展了线程,
不,不是的。 它实现了Runnable。
1)我为什么要这样做? 我可以理解使用线程OR可运行,但是为什么要一起使用呢?
如果使用Runnable,则仍然需要以某种方式运行它,一种方法是创建一个新线程并将其提供给Runnable(在此完成)。
2)如何运作?
new Thread(runnable)
创建一个新线程,然后您可以启动()。 它将在Runnable的run()方法中执行代码。
Runnable
包含应执行的代码(一种替代方法是Callable
)。
Thread
控制代码的执行方式和时间(替代方法是ExecutorService
或直接调用run()以便在当前线程上同步执行)
通常,(为了将这两个功能区分开),您不想扩展Thread,而只想实现Runnable或Callable。
可以扩展Thread并直接实现run(而不是让它委托给Runnable),但这有点老套了。 如果他们今天要重新设计Java API,则Thread可能不再实现Runnable。 线程与其说是可运行的,不如说是奔跑者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.