實現了runnable介面的類,稱為 執行緒輔助類;thread類才是真正的執行緒類
檢視原始碼可知道thread的構造方法可以傳入runnable物件等。
所以這裡就有常見的兩種方式實現runnable的方法建立執行緒
例項化runnable物件
class mythread implements runnable
} mythread mt=new mythread();
thread td=new thread(mt);
td.start();
匿名內部類
runnable mt = new runnable()
};thread mt1 = new thread(mt);
mt1.start();
和上述類似的兩種建立方法
class mythread extends thread
} mythread mt=new mythread(「執行緒名稱」);
mt.start();
new thread("執行緒名稱") .start();
這裡需要提乙個方法 setpriority來設定執行緒的優先順序,這個範圍是 0- 10,預設為5,我面試的時候回答錯了,具體可檢視原始碼
另外需注意
優先順序高的執行緒不一定先執行,必須獲取到足夠的時間片資源,舉個栗子 a優先順序比b高,但此時的時間片資源剛好夠b執行而不夠a執行,可能b就會立即執行,但也可能會發生阻塞。
方便實現非同步通訊 不需使用 「任務執行緒(如繼承thread類) + handler」的複雜組合
asynctask的使用步驟有3個:
建立 asynctask 子類 & 根據需求實現核心方法
建立 asynctask子類的例項物件(即 任務例項)
手動呼叫execute(()從而執行非同步執行緒任務
訊息機制,主要是用來切換執行緒,進行ui的更新(android中只能在主線程更新ui)
非主線程內 一般使用handler.sendmessage()傳送訊息,然後主線程內新建handler的子類重寫handlemessage方法來處理訊息 或者 非主線程內直接使用handler.post()來切換到主線程
handlerthread本質上是通過繼承thread類和封裝handler類的使用,從而使得建立新執行緒和與其他執行緒進行通訊變得更加方便易用
使用步驟
// 步驟1:建立handlerthread例項物件
// 傳入引數 = 執行緒名字,作用 = 標記該執行緒
handlerthread mhandlerthread = new handlerthread("handlerthread");
// 步驟2:啟動執行緒
mhandlerthread.start();
// 步驟3:建立工作執行緒handler & 複寫handlemessage()
// 作用:關聯handlerthread的looper物件、實現訊息處理操作 & 與其他執行緒進行通訊
// 注:訊息處理操作(handlermessage())的執行執行緒 = mhandlerthread所建立的工作執行緒中執行
handler workhandler = new handler( handlerthread.getlooper() )
});// 步驟4:使用工作執行緒handler向工作執行緒的訊息佇列傳送訊息
// 在工作執行緒中,當訊息迴圈時取出對應訊息 & 在工作執行緒執行相關操作
// a. 定義要傳送的訊息
message msg = message.obtain();
msg.what = 2; //訊息的標識
msg.obj = "b"; // 訊息的存放
// b. 通過handler傳送訊息到其繫結的訊息佇列
workhandler.sendmessage(msg);
// 步驟5:結束執行緒,即停止執行緒的訊息迴圈
mhandlerthread.quit();
建構函式的引數意義
核心執行緒數、最大執行緒數、非核心執行緒超時時長、指定時間單位、任務佇列、執行緒工廠
使用步驟
// 1. 建立執行緒池
// 建立時,通過配置執行緒池的引數,從而實現自己所需的執行緒池
executor threadpool = new threadpoolexecutor(
core_pool_size,
maximum_pool_size,
keep_alive,
timeunit.seconds,
spoolworkqueue,
sthreadfactory
);// 2. 向執行緒池提交任務:execute()
// 說明:傳入 runnable物件
threadpool.execute(new runnable()
});// 3. 關閉執行緒池shutdown()
threadpool.shutdown();
// 關閉執行緒的原理
// a. 遍歷執行緒池中的所有工作執行緒
// b. 逐個呼叫執行緒的interrupt()中斷執行緒(注:無法響應中斷的任務可能永遠無法終止)
// 也可呼叫shutdownnow()關閉執行緒:threadpool.shutdownnow()
// 二者區別:
// shutdown:設定 執行緒池的狀態 為 shutdown,然後中斷所有沒有正在執行任務的執行緒
// shutdownnow:設定 執行緒池的狀態 為 stop,然後嘗試停止所有的正在執行或暫停任務的執行緒,並返回等待執行任務的列表
// 使用建議:一般呼叫shutdown()關閉執行緒池;若任務不一定要執行完,則呼叫shutdownnow()
Android的執行緒和執行緒池
執行緒是作業系統排程的最小單元 執行緒是乙個受限制的系統資源,即不能無限制的產生。執行緒的建立銷毀都有相應的開銷 時間片輪轉的方式排程每個執行緒 用途來講分為主線程和子執行緒 主線程 更新ui 子執行緒 耗時操作 在android中扮演執行緒的角色 thread,asynctask,intentse...
Android執行緒池
executors jdk1.5之後的乙個新類,提供了一些靜態工廠,生成一些常用的執行緒池,threadpoolexecutor是executors類的底層實現 1.newsinglethreadexecutor 建立乙個單執行緒的執行緒池。這個執行緒池只有乙個執行緒在工作,也就是相當於單執行緒序列...
Android 執行緒池
threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit blockingqueueworkqueue,threadfactory threadfactory corepoolsi...