繁体   English   中英

Looper,工作线程和其他并发问题

[英]Looper, worker thread and other concurrency issues

有人可以简单地向我解释以下条款,以及它们如何相互关联?

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

  2. looper -

  3. looper thread -

  4. post - 将runnable添加到线程任务队列的末尾

  5. task - 可运行或消息

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

  7. timer -

  8. runnable vs message - 什么时候使用它们?

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

关于Android中的并发问题,我应该熟悉的其他任何术语?

我将尽快解释,但要完全理解这些术语,我将不得不练习开发Android应用程序。

handler :附加到线程(任何线程)的对象,它既处理消息又在其线程中执行runnables。 这有点重要,因为即只有UI线程可以对视图进行操作,有时后台线程必须使用UI线程处理程序在视图中执行操作

looper是一个对象,它遍历线程消息队列,弹出runnables和消息并将它们提供给线程处理程序。 UI线程已经运行了Looper

looper thread是给定looper的线程,这里没什么特别的

帖子任务执行者你已经回答了自己

计时器和类来管理少量时间。 就像测量几秒或几毫秒,节省一些时间等等。

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

除了@hsgubert所说的,还有其他一些值得一提的概念。 进入“多线程世界”后,您应该知道有许多同步和并发处理方法。 当你在并行运行时,你将运行你的应用程序,并且在不同的时间点,你可能会得到一些漂亮的ConcurrentModificacionException

根据我自己的经验,这是我经历过的最大的痛苦之一(内存泄漏允许),可能是因为没有一种模式如何解决它们。 所以我认为你也应该知道这些概念:

  • 必要时使用synchronized方法/变量。 在方法中,它将阻止在当前Thread结束执行之前另一个Thread进入。 但是,它不会阻止其他Thread在其他方法中修改内部数据结构,所以要明确它。 用作synchronized(variable_name) { ... }块,它将阻止在任何其他Thread 应用范围内修改variable_name ,直到退出该块。

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

  • 有几个已经并发准备的数据结构。 这些数据结构基本上已经实现了上面提到的,所以如果你同时在多个地方使用.add() ,Java本身就会处理那个事件并设法不显示任何异常。 更多信息在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM