![](/img/trans.png)
[英]Using Thread/Handler/Looper for Worker Thread Android
[英]Looper, worker thread and other concurrency issues
有人可以简单地向我解释以下条款,以及它们如何相互关联?
handler
- 每个线程都有一个处理程序? 每个视图有一个处理程序? 执行post()
。 OS主线程有一个默认处理程序?
looper
-
looper thread
-
post
- 将runnable添加到线程任务队列的末尾
task
- 可运行或消息
executor
- 管理线程池以执行某些任务。 如果几次执行相同的任务,则非常有用。
timer
-
runnable vs message
- 什么时候使用它们?
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
间同步方法。 我最常用的两个是Semaphore
和CountDownLatch
(可能我使用后者最多)。 有时可能会发生这样的情况:在某个其他部分(或Thread
)完成执行之前,您不希望执行某些代码部分。 这种方法安全生命。
有几个已经并发准备的数据结构。 这些数据结构基本上已经实现了上面提到的,所以如果你同时在多个地方使用.add()
,Java本身就会处理那个事件并设法不显示任何异常。 更多信息在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.