簡體   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