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



有人能解释一下为什么在新线程中写入新的Runnable吗?我第一次在android开发者那里看到这个,请看下面链接中的代码。另外,您能告诉我们为什么需要在单独的线程中实现通知吗?

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

我过去常常通过新的Thread或Runnable创建线程,但不是一起创建,所以有点困惑。。

我们可以通过两种方式创建线程

通过扩展Thread类和实现可运行接口

如果我们像下面的一样通过扩展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()
}
}

您不能用ThreadDemo实例直接调用start(),因为Runnable(I)只包含run()方法,所以您必须在创建Thread时将ThreadDemo实例传递给Thread实例—它初始化了target Runnable instance并调用了Runnable run()方法,而不是Threadrun()方法。

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

类似于

ThreadDemo d = new ThreadDemo(); //d.start() is not possible
    Thread t = new Thread(d);//where d is target runnable
    t.start()

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

它所显示的只是你如何在通知栏中显示进度。它试图告诉你的是,在漫长的后台操作过程中,你可以在通知栏中显示进度。它是线程安全的,不必是主UI线程,所以可以随意在任何需要的地方显示进度。通常在递增计数器的操作过程中不会使用Thread.sleep。实际上,为了显示进度,您必须决定在操作过程中进度值代表什么。

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

为了简单起见(?)Thread s也是Runnable s,因此在简单的情况下,您只需将Thread子类化并覆盖其run方法(run方法的默认实现不起任何作用)。如果不将Runnable赋予Thread,则它将自己用作执行的Runnable

最新更新