我想了解ThreadPoolExecutor類。我已閱讀此answer和Javadoc。但我的實驗不匹配這樣的描述:ThreadPoolExecutor的maximumPoolSize如何工作?
我初始化線程池與工廠跟蹤IDS
int tcounter = 0;
ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 1, TimeUnit.MINUTES,
new ArrayBlockingQueue<Runnable>(1000), new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new mThread(tcounter++, r);
}
});
public class mThread extends Thread {
int id;
private mThread(int id, Runnable run) {
super(run);
GLog.e("created thread " + id);
this.id = id;
}
}
接任務:
public class mRunanble implements Runnable {
int value = 0;
private mRunanble(int value) {
super();
this.value = value;
}
@Override
public void run() {
SystemClock.sleep(3000);
Thread t = Thread.currentThread();
if (t instanceof mThread) {
GLog.e("Say " + (value) + " on thread " + ((mThread) t).id);
}
}
}
,並指定一個按鈕的動作:
executor.execute(new mRunanble(i++));
但我垃圾郵件的按鈕和第三個線程永遠不會創建,那麼ThreadPoolExecutor構造函數中的第二個參數是什麼(maximumPoolSize=4
)。 我specting 4個線程被創建,其中2 1分鐘後執行
什麼是'Runa'? 'mRunanble'? – Jeffrey
對不起,現在編輯 – Addev
是因爲你的線程在睡覺嗎?也許改變你的runnable做一個忙等待會給你你期待的結果 – happymeal