Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中匿名类扩展线程_Java_Multithreading - Fatal编程技术网

Java中匿名类扩展线程

Java中匿名类扩展线程,java,multithreading,Java,Multithreading,这是一个Java语法问题,但只是一些背景知识 使用android,我创建了一个小应用程序,速度非常慢,经常崩溃,因为当点击按钮时,onClick()方法会更改各种按钮的按钮图像。这是一个非常笨拙和缓慢的过程,我在网上搜索后发现这个问题非常普遍,当在onClick()方法中更改大量图像时,最好将它们放在单独的线程中。某个善良的人给出了这样做的代码 new Thread(new Runnable() { public void run() {

这是一个Java语法问题,但只是一些背景知识

使用android,我创建了一个小应用程序,速度非常慢,经常崩溃,因为当点击按钮时,onClick()方法会更改各种按钮的按钮图像。这是一个非常笨拙和缓慢的过程,我在网上搜索后发现这个问题非常普遍,当在onClick()方法中更改大量图像时,最好将它们放在单独的线程中。某个善良的人给出了这样做的代码

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)在技术上不是一个异常类扩展线程吗?这就是我读到的。不,这是设置一个委托。还有西米尔