2014-02-22 26 views
0

有人可以请简要解释下列术语以及它们如何相互关联?Looper,工作线程和其他并发问题

  1. handler - 每个线程都有一个处理程序?每个视图有一个处理程序? 执行post()。 有一个OS主线程的默认处理程序?

  2. looper -

  3. looper thread -

  4. post - 将可运行到的线程的任务结束队列

  5. task - 可运行或消息

  6. executor - 管理线程池以执行一些任务。如果执行几次相同的任务,则很有用。

  7. timer -

  8. runnable vs message - 何时使用他们每个人的?

  9. thread's queue - 每个线程都有一个任务队列。

任何其他条款我应该熟悉 关于Android中的并发问题?

回答

1

我会尽力解释一下,但要充分理解这些术语,我将不得不练习开发android应用程序。

handler:附加到线程(任何线程)的对象,它既处理消息又在其线程中执行可执行文件。这是因为即只有UI线程可以在视图上做的作业,有时后台线程必须使用UI线程处理的意见,做动作

活套是一个对象,有时是重要的,通过一个线程消息队列进行迭代,弹出runnables和消息并将它们提供给线程处理程序。在UI线程来已经有尺蠖运行

弯针线是一个给定的弯针的线,这里没有什么特别

任务执行 OU回答自己已经

定时器和类管理少量时间。就像测量几秒或几毫秒,说明一些时间等等。

runnable vs message主要区别在于:当你使用runnables时,海报线程mus指定了某些东西的实现,当你使用消息时,处理程序指定某个动作的实现。当你只用一张海报和一个手柄时,你几乎可以互换使用。当你有许多不同的线程将相同的东西发布给同一个处理程序时,我会使用消息,反之亦然。

+0

那么为什么有任何视图有'post()'方法? –

+0

handler和looper是活动对象(意思是线程)还是静态机制?哪些线程遇到它们? –

+0

View.post()方法只是一个实用工具,Android提供给你在UI线程中运行的东西。我实际上不知道Android实际上是否将此代码传递给处理程序,或者只是让它在下次遍历视图层次结构时执行,但实际上这并不重要,因为它作为实现细节 – hsgubert

1

除了什么@hsgubert说,还有一些其他的概念值得一提。一旦你进入“多线程世界”,你应该知道有很多同步和并发处理方法。当你在平行运行时,你会运行你的应用程序,并且一次一次,在不同的时间点,你可能会得到一些漂亮的ConcurrentModificacionException。根据我自己的经验,这是我经历过的最大的痛苦之一(内存泄漏容许),可能是因为没有模式来解决它们。所以我认为你应该也知道这些概念:

  • 使用​​方法/变量随时需要。在方法中,它会阻止在当前Thread结束执行之前输入另一个Thread。它会而不是阻止其他Thread修改其他方法中的内部数据结构,但要清楚它。用作synchronized(variable_name) { ... }区块时,将阻止variable_name被其他Thread修改为应用程序范围,直到您退出该区块为止。

  • 有许多inter-Thread同步方法。我最常用的两个是SemaphoreCountDownLatch(可能我使用最多后者)。有时可能会发生,直到其他部分(或Thread)完成其执行之前,您不想执行某些代码部分。这种方法安全的生命。

  • 有几个已经并发的数据结构。这些数据结构基本上已经实现了上述内容,所以如果在多个位置同时使用.add(),则Java本身处理该事件并设法不显示任何异常。更多信息here

+0

如果在多个位置同时使用.add(),那么''add'是什么意思' –

+1

如果您一次从两个不同位置访问相同的数据结构,您将得到此'ConcurrentModificationException'。因此,您需要确定一些阻止机制以避免这种情况发生,这就是为什么当您知道您正在处理来自多个地方的同一对象时,必须使用'synchronized',以防止它的并发修改。这些数据结构来自'java。并发“已经有了内置机制,无需您自己设置”同步“即可完成此任务,因此您可以将此任务依赖于数据结构管理。 – nKn