任何想法,爲什麼這部分代碼鎖定UI線程?Android - 從同步塊啓動線程
synchronized (executionMonitor) {
thread = new Thread(asyncCommand);
thread.setPriority(Thread.MIN_PRIORITY);
thread.setName(command.getClass().getSimpleName());
thread.start();
return;
}
我從UI塊開始線程。在調試期間,我發現該UI線程處於MONITOR狀態。但我不明白爲什麼?
executionMonitor被定義僅作爲對象:
private Object executionMonitor = new Object();
,而不是在其他地方使用。
*我從UI塊* + *開始線程,並沒有在其他地方使用* ...那麼爲什麼你需要同步呢? – Selvin
當你希望實現互斥時,你應該同步,爲什麼當你只有ui線程發射它時,你需要同步一個塊才能激發線程?放下你的同步塊,進一步說,如果你的主UI正在運行任務時遇到問題,請嘗試'runOnUiThread(Runnable action)'並從那裏開始任何東西,我也不明白爲什麼你從同步塊返回。線程和同步是一個複雜的問題,如果你沒有足夠的經驗,它會受到傷害。嘗試使用諸如'Executor'服務之類的內置對象。 – shaydel
@Selvin - 這不是我的代碼,我試圖理解爲什麼UI被鎖定 – michalp