非同步執行緒無法多次建立的問題

2021-06-21 09:38:11 字數 1052 閱讀 1430

最近在做安卓程式過程中,寫了乙個按鈕走秒的messagebox控制項,走秒的實現是用非同步執行緒asynctask實現的,具體如下

public class timerdisplay extends asynctask

@override

protected void doinbackground(void... params) else

}} catch (interruptedexception e)

return null;

} @override

protected void onprogressupdate(integer... values) else if (values[0] == 0)

}}

在外層呼叫該類的方式如下:

timerdisplay td = new timerdisplay(positivebutton, alertdialog);

td.execute();

最後發現了這樣乙個bug

該messagebox在應用中多次建立時,且每次都是在走秒未走完時,關閉掉dialoge,迴圈操作次數達到7次以上時,messagebox不會出現走秒的情況了

在查詢問題的過程中,發現每次之所以出現不走秒的情況,是因為非同步執行緒沒有走doinbackground()方法,在**中打log發現雖然沒有走doinbackground()方法,但是走了

onpreexecute() 方法,且執行緒處於running狀態,

最後查詢問題發現非同步執行緒在設計之初,就有乙個個數限制,當超過這個個數之後,執行緒就不會被執行,

解決辦法是

timerdisplay td = new timerdisplay(positivebutton, alertdialog);

full_task_executor = (executorservice) executors.newcachedthreadpool();

td.executeonexecutor(full_task_executor);

springboot 合理建立非同步執行緒

springboot 合理建立非同步支援的方法 建立非同步執行緒池 return bean aaataskexecutor 必須 通過 async aaataskexecutor 找到該執行緒池 public executor creatthreadpool1 建立非同步執行緒池 return be...

翻譯 非同步I O不會建立新的執行緒

這是非同步程式設計最基本的事實 非同步i o不會建立新的執行緒 反對這個事實的人很多,他們對此的看法是 如果我await乙個操作,那麼一定會有乙個執行緒正在等待,它可能是乙個執行緒池的執行緒,或者是作業系統執行緒,或者是某個裝置的驅動程式 不用關注這些看法,只需要記住如果非同步操作是純粹的 方法全是...

多執行緒的建立問題

已知程序是執行緒執行程式的容器,程序只是為執行緒的執行提供乙個執行環境。真正執行程式的是執行緒,每個程序至少擁有乙個執行緒,當建立乙個程序時,那麼系統會自動建立乙個執行緒,稱為主線程,也就是執行main函式或winmain函式的執行緒,該函式是程式的入口函式,此後,主線程建立其他執行緒。對單執行緒來...