为什么要在新线程中编写新的Runnable?

时间:2016-04-04 14:28:52

标签: java android

任何人都可以解释为什么在新线程中编写新的Runnable?我在android开发人员看到这个时间,请看下面链接中的代码。 另外,你能告诉我们为什么需要在单独的线程中实现通知吗?

http://developer.android.com/training/notify-user/display-progress.html

我曾经用新线程或Runnable创建线程但不能一起创建线程,所以有点困惑..

3 个答案:

答案 0 :(得分:1)

这只是一个懒惰的例子,无论谁设置该页面都写了。可能因为它需要浓缩和简短。

它显示的是如何在通知栏中显示进度。它试图告诉您的是,您可以在漫长的后台操作期间在通知栏中显示进度。它是线程安全的,它不必是主UI线程,所以随时随地显示进度。通常,在递增计数器的过程中,您不会在操作期间使用Thread.sleep。实际上,要显示进度,您必须确定进度值在操作过程中表示的内容。

答案 1 :(得分:1)

Thread是表示执行线程的java对象。 Runnable是对象的接口,表示一些旨在由Thread执行的代码。两个概念,两种类型(执行 - > Thread,代码 - > Runnable)。

为简单起见(?)Thread s也是Runnable s,因此在简单的情况下,您只需要子类Thread并覆盖其run方法(默认实现) run方法没有做任何事情)。如果您未向Runnable提供Thread,则会将其自身用作Runnable来执行。

答案 2 :(得分:1)

我们可以用两种方式创建一个线程

  

通过扩展Thread类和实现Runnable接口

如果我们通过扩展Thread类来创建一个类,如下所示

class ThreadDemo extends Thread{
public void run(){
//job of a thread
}
public static void main (String[] args){
ThreadDemo d = new ThreadDemo();
d.start();
}
}

您可以直接调用start()jvm内部调用run()方法,以便您可以通过在类中覆盖它来定义run()中的线程作业。 但是如果你通过实现Runnable(I)来创建Thread,如下所示。

class ThreadDemo implements Runnable{
public void run(){
//job of Thread 
}
public static void main(String[] args){
ThreadDemo d = new ThreadDemo(); //d.start() is not possible
Thread t = new Thread(d);//where d is target runnable
t.start()
}
}

您无法直接使用start()实例致电ThreadDemo,因为Runnable(I)仅包含run()方法,因此您必须将ThreadDemo个实例传递给{{1}在Thread创建时,它会初始化您的Thread并调用target Runnable instance Runnable方法,而不是run()Thread方法。

run()

类似于

new Thread(
    new Runnable() {
       ......
       .....
 }
    }
).start();