2012-09-19 49 views
0

我在理解某些类型的制作胎面循环之间的差异时遇到了问题。关于线程和可运行程序

一个是(粗略示范):

Thread thread=new Thread("name") { 
public void run() 
    { 
    // do stuff 
    } 
}.start(); 

第二个是: 使该imlpements可运行一个类, 创建线程:

Thread thread = new Thread(this,"name").start(); 

和第三(在机器人,我不,如果它可以工作一些如何): 做一个处理程序, 创建一个Runnable, 和handler.postDelayed(runnable)handler.post(runnable)

我不明白有什么区别,我唯一注意到的是,使一个线程使运行循环比使用处理程序的工作更快。 有人可以向我解释他们之间有什么区别,我应该使用什么?

+0

重新使用线程可以执行得更好,否则它们都是一样的。它被认为是不好的做法延伸线程,因为这可能会导致各种意想不到的错误。 –

+0

以什么方式使用线程?使用处理程序?或者只是做一个简单的线程线程? –

+0

您可以重新使用带线程池的线程,例如ExecutorService或为您创建的事件线程,例如UI线程。 –

回答

2

第一种和第二种方式完全相同。这只是不同的构造,可以在不同情况下更有用。请注意0​​执行Runnable,并可能只是在新线程中运行自己。

第三种方式是由你误解了一点。 Handler在实例化Handler的线程中运行Runnable(除非指定另一个looper)。如果您在UI线程中创建了Handler,它也会在UI线程中运行Runnable。结果它可能会工作得更慢。

+0

我会这样说,除非你有一个很好的理由,否则不要扩展Thread类。坚持实现Runnable接口。 – Matt

+0

除了逻辑结构的美学分离之外,是否有任何不重写线程运行方法的好理由?任何可能重要的潜在问题都知道? –

+0

不一定是个问题,但'Runnable'也可以传递给'ExecutorService'。虽然你也可以传递一个'Thread'对象,这会让人感到困惑和不必要。 – Tudor