線程同步的四種機(jī)制
線程同步有四種機(jī)制,分別是臨界區(qū)(Critical Section)、互斥量(Mutex)、信號量(Semaphore)、事件(Event)
- 臨界區(qū):
多個線程訪問同一個共享資源的時候,有一個線程進(jìn)入公共資源(任意時刻只允許一個線程訪問的資源)后,其他打算訪問的線程被掛起,那么這個公共資源可以被稱為臨界區(qū),當(dāng)在臨界區(qū)被釋放時,其他線程才可進(jìn)入。 - 互斥量:
采用互斥對象機(jī)制(例如被聲明 synchronized加鎖的方法) - 信號量:
在資源限制的線程數(shù)內(nèi),允許多個線程訪問的數(shù)量。 - 事 件:
通過通知操作的方式來保持線程的同步,還可以方便實現(xiàn)對多個線程的優(yōu)先級比較的操作
Callback回調(diào)函數(shù):
在需要使用的時候,設(shè)置Callback接口,并在里面設(shè)置需要回調(diào)的方法:
void interface CallBack{
public void constant(int i);
}
在需要傳參數(shù)的方法內(nèi)實現(xiàn)
int i = 3;
CallBack mCallBack;
mCallBack.constant(i);
在需要響應(yīng)的方法設(shè)置:
CallBack mCallBack = new CallBack() {
@Override
public void constant(int i) {
Log.w("DDD",String.valueOf(i));
}
};
有效利用多線程的關(guān)鍵是理解程序是并發(fā)執(zhí)行而不是串行執(zhí)行的。例如:程序中有兩個子系統(tǒng)需要并發(fā)執(zhí)行,這時候就需要利用多線程編程。
通過對多線程的使用,可以編寫出非常高效的程序。不過請注意,如果你創(chuàng)建太多的線程,程序執(zhí)行的效率實際上是降低了,而不是提升了。
請記住,上下文的切換開銷也很重要,如果你創(chuàng)建了太多的線程,CPU花費在上下文的切換的時間將多于執(zhí)行程序的時間!