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概覽執行緒
- Android 判斷當前執行緒是否是主執行緒的兩種方法Android執行緒
- 使用Runnable介面實現執行緒的方法執行緒
- 【原創】Java多執行緒初學者指南(3):使用Runnable介面建立執行緒Java執行緒
- 【49】瞭解new_handler的行為
- 這樣執行執行緒是否妥當?執行緒
- QT 主執行緒子執行緒互相傳值QT執行緒
- JAVA多執行緒Thread VS Runnable詳解Java執行緒thread
- windows(10)執行laravel new blog出錯WindowsLaravel
- 主佇列&主執行緒佇列執行緒
- Handler怎麼進行執行緒通訊?Handler原理解讀執行緒
- 匿名內部類中關於new Runnable ( )
- Android 進階 ———— Handler系列之建立子執行緒HandlerAndroid執行緒
- java執行緒系列---Runnable和Thread的區別Java執行緒thread
- Java 多執行緒異常捕獲Runnable實現Java執行緒
- 解惑Android的post()方法究竟執行在哪個執行緒中Android執行緒
- 模擬主執行緒等待子執行緒的過程執行緒
- 子執行緒中建立Handler可以嗎?(上)執行緒
- 執行緒數,512是否合理?執行緒
- 大話Android多執行緒(三) 執行緒間的通訊機制之HandlerAndroid執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- 多執行緒-實現Runnable介面的方式賣電影票案例執行緒
- IT 執行在雲端,而云執行在 Linux 上Linux
- 多執行緒-執行緒控制之守護執行緒執行緒
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒
- 執行緒和執行緒池執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒 執行緒池 Task執行緒