Java中匿名类扩展线程
这是一个Java语法问题,但只是一些背景知识 使用android,我创建了一个小应用程序,速度非常慢,经常崩溃,因为当点击按钮时,onClick()方法会更改各种按钮的按钮图像。这是一个非常笨拙和缓慢的过程,我在网上搜索后发现这个问题非常普遍,当在onClick()方法中更改大量图像时,最好将它们放在单独的线程中。某个善良的人给出了这样做的代码Java中匿名类扩展线程,java,multithreading,Java,Multithreading,这是一个Java语法问题,但只是一些背景知识 使用android,我创建了一个小应用程序,速度非常慢,经常崩溃,因为当点击按钮时,onClick()方法会更改各种按钮的按钮图像。这是一个非常笨拙和缓慢的过程,我在网上搜索后发现这个问题非常普遍,当在onClick()方法中更改大量图像时,最好将它们放在单独的线程中。某个善良的人给出了这样做的代码 new Thread(new Runnable() { public void run() {
new Thread(new Runnable() {
public void run() {
quest.post(new Runnable() {
public void run() {
correct = nextQ();
}
});
}
}).start();
nextQ()方法和“quest”文本视图是我的。这与我的问题不太相关,但nextQ进行数据库搜索并更新图像,在线程之外运行它非常缓慢和粗糙。
现在,我将此代码复制并粘贴到我的代码中,它运行良好。一个幸福的结局。但是我不喜欢使用我不懂的代码。我对Java不是很了解。所以我尽我所能研究匿名内部类,但我仍然被代码难住了
因此,匿名类扩展了线程,并且因为它的参数使用了一个匿名类,实现了runnable,其中放置了代码的“肉”。。
问题:
1) 我为什么要这样做?我可以理解使用线程或runnable,但为什么要一起使用?
2) 这是怎么回事?我回到了thread和runnable的基础知识,但我不知道如何以这种方式将它们结合使用。- 您正在创建
接口的匿名实现Runnable
- 您正在将该实现传递给
类的构造函数。所以您不是在扩展线程,您只是在实例化它,并传递一个参数线程
- 然后
线程。因此,传递参数的start()
方法将在新线程中调用run()
定义执行的内容Runnable
线程实际执行它李>
线程
也是可运行的
。这就是Java 5中引入was的原因,它将执行机制(执行器)与执行的代码(Runnable
或Callable
)分离开来
Runnable
接口的匿名实现线程
类的构造函数。所以您不是在扩展线程,您只是在实例化它,并传递一个参数start()
线程。因此,传递参数的run()
方法将在新线程中调用
定义执行的内容Runnable
线程实际执行它李>
线程
也是可运行的
。这就是为什么在Java5中引入了was,它将执行机制(执行器)与执行的代码(Runnable
或Callable
)分开
所以匿名类扩展了线程
不,没有。它实现了Runnable
1) 我为什么要这样做?我可以理解使用线程或runnable,但为什么要一起使用
如果您使用Runnable,您仍然需要以某种方式运行它,其中一种方法是创建一个新线程并将其交给Runnable(这就是这里要做的)
2) 这是怎么回事
newthread(runnable)
创建一个新线程,然后可以启动()。它将在Runnable的run()方法中执行代码
Runnable
包含应该执行的代码(另一种选择是Callable
)
Thread
控制代码的执行方式和时间(可选方法是ExecutorService
或直接调用run()在当前线程上同步执行)
通常(为了使这两个函数分开),您不想扩展线程,只想实现Runnable或Callable
可以扩展线程并直接实现run(而不是让它委托给Runnable),但这有点老派。如果他们今天重新设计JavaAPI,线程可能不再实现Runnable。线程与其说是可运行线程,不如说是运行线程
所以匿名类扩展了线程
不,没有。它实现了Runnable
1) 我为什么要这样做?我可以理解使用线程或runnable,但为什么要一起使用
如果您使用Runnable,您仍然需要以某种方式运行它,其中一种方法是创建一个新线程并将其交给Runnable(这就是这里要做的)
2) 这是怎么回事
newthread(runnable)
创建一个新线程,然后可以启动()。它将在Runnable的run()方法中执行代码
Runnable
包含应该执行的代码(另一种选择是Callable
)
Thread
控制代码的执行方式和时间(可选方法是ExecutorService
或直接调用run()在当前线程上同步执行)
通常(为了使这两个函数分开),您不想扩展线程,只想实现Runnable或Callable
可以扩展线程并直接实现run(而不是让它委托给Runnable),但这有点老派。如果他们今天重新设计JavaAPI,线程可能不再实现Runnable。线程与其说是可运行的,不如说是运行的。谢谢。当我第一次看到代码时,我觉得很奇怪。我几乎没有穿线的经验。关于上面的第2点,语法new thread(runnable)在技术上不是一个异常类扩展线程吗?这就是我读到的。不,这是设置一个委托。还有西米尔