new Handler().postDelayed(new Runnable())是否執行在主執行緒?
問題:new Handler().postDelayed(new Runnable())是否執行在主執行緒?
答案:是的.
這個 new Runnable() 依附於建立Handler的執行緒,如下程式碼,在絕對的UI執行緒中列印執行緒Id:
System.out.print("UI Thread == " + Thread.currentThread().getId());
然後在postDelayed中列印執行執行緒的Id:
new Handler().postDelayed(new Runnable() { @Override public void run() { System.out.print("Handler Thread == " + Thread.currentThread().getId()); } }, 1000);
最後列印結果如下:
04-12 09:52:24.110 17026-17026/com.spd.sinoss I/System.out: UI Thread = 1 04-12 09:52:27.111 17026-17026/com.spd.sinoss I/System.out: Handler Thread = 1
因此,可以看出來,它們兩個程式都是執行在主執行緒中的。
官方解釋是:
The runnable will be run on the thread to which this handler is attached.
因為,這個開啟的Runnable()介面會在這個Handler所依附執行緒中執行,而這個Handler是在UI執行緒中建立的,所以
自然地依附在主執行緒中了,且new Handler().postDelayed(new Runnable())沒有重新生成新的 New Thread().
相關文章
- new Thread與執行緒建立thread執行緒
- Runnable介面實現多執行緒執行緒
- Javascript中new的執行過程JavaScript
- 執行緒執行 之 Runnable Callable Future ,FutureTask ExcutorService概覽執行緒
- 保證執行緒在主執行緒執行執行緒
- windows(10)執行laravel new blog出錯WindowsLaravel
- 使用Runnable介面實現執行緒的方法執行緒
- 匿名內部類中關於new Runnable ( )
- Android 進階 ———— Handler系列之建立子執行緒HandlerAndroid執行緒
- QT 主執行緒子執行緒互相傳值QT執行緒
- 解惑Android的post()方法究竟執行在哪個執行緒中Android執行緒
- Handler怎麼進行執行緒通訊?Handler原理解讀執行緒
- 主佇列&主執行緒佇列執行緒
- 執行緒數,512是否合理?執行緒
- 子執行緒中建立Handler可以嗎?(上)執行緒
- 模擬主執行緒等待子執行緒的過程執行緒
- 主執行緒等待所有其他執行緒執行完畢,然後再繼續執行主執行緒的邏輯,有以下幾種方法可以實現:執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- IT 執行在雲端,而云執行在 Linux 上Linux
- 執行緒和執行緒池執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 執行緒 執行緒池 Task執行緒
- 多執行緒【執行緒池】執行緒
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒
- Java之實現多執行緒的方式二:實現Runnable介面Java執行緒
- java多執行緒程式設計,Thread,Runnable,Future相關知識Java執行緒程式設計thread
- 使用Thread類和Runnable介面實現多執行緒的區別thread執行緒
- JVM程式用一個主執行緒來執行main()方法JVM執行緒AI
- linux檢視是否開啟超執行緒Linux執行緒
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 執行緒控制之休眠執行緒執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- Android多執行緒之Handler、Looper與MessageQueue原始碼解析Android執行緒OOP原始碼
- new self()與new static()
- 溫故知新----執行緒之Runnable與Callable介面的本質區別執行緒
- gdb 除錯 new 一個物件主要兩個 handler除錯物件