并行和并發(fā)是計算機領域中兩個相關但不同的概念。
并行(Parallel)指的是同時執(zhí)行多個任務或操作,它依賴于具有多個處理單元的系統(tǒng)。在并行計算中,任務被分成多個子任務,并且這些子任務可以同時在不同的處理單元上執(zhí)行,從而加速整體的計算速度。并行計算能夠充分利用系統(tǒng)資源,提高計算效率。
并發(fā)(Concurrency)指的是多個任務或操作在相同的時間段內(nèi)交替執(zhí)行。在并發(fā)計算中,任務之間可能不是同時進行的,而是通過快速切換來實現(xiàn)看似同時執(zhí)行的效果。并發(fā)計算通常用于處理多個獨立的任務,通過合理地調(diào)度和協(xié)調(diào)這些任務,可以最大限度地提高系統(tǒng)的吞吐量和資源利用率。
簡單來說,如果有多個任務需要同時進行,那么采用并行的方式可以同時在不同的處理單元上執(zhí)行這些任務;而如果多個任務需要在同一時刻內(nèi)交替執(zhí)行,那么采用并發(fā)的方式可以通過快速切換來實現(xiàn)。
需要注意的是,并行和并發(fā)并不是完全互斥的概念,實際應用中也可以同時兼顧并行和并發(fā)的優(yōu)勢,以提高系統(tǒng)性能和響應能力。
例子:
問:手機中運行多個應用,是并行還是并發(fā)
答:在手機中運行多個應用程序時,通常是采用并發(fā)的方式運行。并發(fā)指的是多個任務交替執(zhí)行,每個任務都有機會獲得處理器的時間片進行執(zhí)行。因為處理器的時間片非常短暫,所以給我們的感覺就像是多個任務同時進行。
雖然在手機上可以同時打開多個應用程序,但實際上處理器只能在某一個時間點上執(zhí)行一個任務。操作系統(tǒng)通過快速切換任務的方式,使得多個應用程序交替執(zhí)行,從而給我們的感覺是在同時運行多個應用程序。
值得注意的是,并發(fā)和并行是兩個概念。并行是指多個任務真正地同時執(zhí)行,需要多個處理器或者多核處理器來實現(xiàn)。而手機通常是單核或者少數(shù)幾個核心的處理器,所以它無法真正實現(xiàn)并行執(zhí)行多個應用程序。因此,手機上多個應用程序的運行是通過并發(fā)實現(xiàn)的。
問:
答:
在一個應用程序的多個子線程運行過程中,可以既有并發(fā)也有并行。
并發(fā)是指多個任務交替執(zhí)行,每個任務都有機會獲得處理器的時間片進行執(zhí)行。在一個應用程序的多個子線程中,如果這些線程是通過時間片輪轉(zhuǎn)的方式交替執(zhí)行,并且在同一個處理器上執(zhí)行,那么它們就是并發(fā)執(zhí)行的。
而并行是指多個任務真正地同時執(zhí)行,需要多個處理器或者多核處理器來實現(xiàn)。在一個應用程序的多個子線程中,如果這些線程能夠被分配到不同的處理器核心上并同時執(zhí)行,那么它們就是并行執(zhí)行的。
具體是并發(fā)還是并行取決于系統(tǒng)的硬件和調(diào)度策略。如果系統(tǒng)有多個處理器核心,并且這些子線程能夠被分配到不同的核心上同時執(zhí)行,那么就是并行執(zhí)行。如果系統(tǒng)只有一個處理器核心,這些子線程通過時間片輪轉(zhuǎn)交替執(zhí)行,那么就是并發(fā)執(zhí)行。
需要注意的是,并發(fā)和并行是相對于線程或任務而言的,并不是絕對的概念。在具體的場景中,可能會存在一些限制或者條件,導致實際的執(zhí)行情況有所不同。
子線程中不能執(zhí)行UI操作。
UI 操作指的是與用戶界面(User Interface)相關的操作,包括但不限于以下幾種:
- 更新視圖:例如更改 TextView 的文本內(nèi)容、設置 ImageView 的圖片等。
- 處理用戶輸入:例如響應按鈕點擊事件、處理文本框輸入等。
- 顯示對話框:例如顯示警告對話框、確認對話框等。
- 啟動新的 Activity 或 Fragment:例如通過 startActivity() 方法啟動新的 Activity、通過 FragmentTransaction 添加、替換或移除 Fragment。
- 更新通知欄:例如發(fā)送通知消息、更新通知的進度條等。
在 Android 中,UI 操作必須在主線程(也稱為 UI 線程)上執(zhí)行。如果在子線程中執(zhí)行了 UI 操作,就可能導致程序崩潰或出現(xiàn)其他異常情況。
Activity 跳轉(zhuǎn)屬于 UI 操作的一種,因為它涉及到啟動新的 Activity 并切換到新的界面。因此,從 Activity A 跳轉(zhuǎn)到 Activity B 是需要在主線程(即 Activity 的生命周期方法中)執(zhí)行的,而不是在子線程中執(zhí)行。
因為 UI 操作必須在主線程中執(zhí)行。為了解決這個問題,你可以使用 runOnUiThread() 方法或 Handler 機制將 UI 操作切換回主線程,然后在主線程中進行 Activity 跳轉(zhuǎn)。
如果你需要在子線程中執(zhí)行耗時操作,然后根據(jù)操作結(jié)果進行 Activity 跳轉(zhuǎn),可以使用 Handler 機制來實現(xiàn)。在子線程中執(zhí)行耗時操作后,通過 Handler 發(fā)送消息到主線程,然后在主線程中接收消息并進行跳轉(zhuǎn)操作。
總結(jié)起來,Activity 跳轉(zhuǎn)是一種 UI 操作,必須在主線程中執(zhí)行。在子線程中執(zhí)行耗時操作后,可以使用 Handler 機制或其他方式將結(jié)果傳遞到主線程,然后在主線程中進行 Activity 跳轉(zhuǎn)。
Activity負責管理UI組件(例如View)以及處理用戶輸入和其他交互操作。一個應用程序可以由多個Activity組成,它們之間可以通過Intent進行切換和通信。Activity通常包含一個或多個View,并負責處理View的事件和更新。
Service后臺服務用于執(zhí)行某些長時間運行的任務,下載文件、播放音樂,數(shù)據(jù)處理、網(wǎng)絡請求、數(shù)據(jù)庫操作等。
?
幾種不可以的情況:
主線程中可以啟動子線程,但是不能用線程實例去調(diào)用方法?。。?/p>
進程和線程:
一般,同一應用的所有組件會在相同的進程和線程。也可以是其他的進程和線程。
系統(tǒng)不會為每個組件實例創(chuàng)建單獨的線程。在同一進程中運行的所有組件均在界面線程中進行實例化,并且對每個組件的系統(tǒng)調(diào)用均由該線程進行分派。
不得通過工作線程操縱界面,而只能通過界面線程操縱界面文章來源:http://www.zghlxwxcb.cn/news/detail-812317.html
后臺”或“工作”線程文章來源地址http://www.zghlxwxcb.cn/news/detail-812317.html
到了這里,關于并發(fā),并行,線程與UI操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!