在android開發中為了復用執行緒以及節約執行緒開銷,執行緒池是使用較多的一種方法,有時也會有這樣的需求,不同的執行緒執行任務的緊急度是不一樣的,後加入執行緒池佇列的任務可能需要優先處理,在threadpoolexecutor的建構函式中需要傳遞乙個繼承blockqueue的子類。
在sdk中已經提供了乙個
priorityblockingqueue這樣的優先順序阻塞佇列,我們要做的就是擴充套件runnable,新增乙個優先順序的屬性
public abstract class runwithpriority implements runnable
public int getpriority()
}
然後就是為
priorityblockingqueue建構函式的第二個引數,繼承
comparator實現乙個比較優先順序的類
public class comparepriorityimplements comparator
}
完成了這個類之後我們就能實際使用了,寫乙個test類
public class test catch (interruptedexception ex)
system.out.println(this.getpriority() + " finished");
}});
exe.execute(new runwithpriority(10) catch (interruptedexception ex)
system.out.println(this.getpriority() + " finished");
}});
exe.execute(new runwithpriority(5) catch (interruptedexception ex)
system.out.println(this.getpriority() + " finished");
}});
exe.execute(new runwithpriority(3) catch (interruptedexception ex)
system.out.println(this.getpriority() + " finished");
}});
exe.execute(new runwithpriority(4) catch (interruptedexception ex)
system.out.println(this.getpriority() + " finished");
}});
}}
我們通過輸出log來看
10 started
2 started
10 finished
5 started
2 finished
4 started
5 finished
3 started
4 finished
3 finished
可以看出核心執行緒是2個 也就是剛開始進入的10 和 2 , 後面的呼叫順序是5、3、4,在佇列中經過優先順序排列變成了5、4、3
,真正的按照優先順序的大小進行排列呼叫順序
android 程序優先順序
程序 process 的優先順序 從高到低 前台程序 foreground process 1 當前使用者操作的activity所在程序 2 繫結了當前使用者操作的activity的service所在程序 3 呼叫了startforeground 的service 1 提高service優先順序的方...
Android程序優先順序
android將程序的優先順序分為5個層次,按照優先順序由高到低排列如下 前台程序 foreground process 它表明使用者正在與該程序進行互動操作,android系統依據下面的條件來將乙個程序標記為前台程序 可見程序 visible process 它表明雖然該程序沒有持有任何前台元件,...
Android程序優先順序
程序間的優先順序關係 執行耗時操作的程序選擇 參考資料 android在記憶體緊張的時候會對程序採取一定的策略來終止程序,而這些策略是往往是根據程序的優先順序來出處理的 優先順序由高到低排列 指正在與使用者進行互動的應用程序,該程序數量較少,是最高優先順序程序,系統一般不會終止該程序,而判斷為前台程...