我想了解線程池的邏輯,而下面有一個簡單的不正確和不充分執行它:簡單線程池的實現
class ThreadPool {
private BlockingQueue<Runnable> taskQueue;
public ThreadPool(int numberOfThreads) {
taskQueue = new LinkedBlockingQueue<Runnable>(10);
for (int i = 0; i < numberOfThreads; i++) {
new PoolThread(taskQueue).start();
}
}
public void execute(Runnable task) throws InterruptedException {
taskQueue.put(task);
}
}
class PoolThread extends Thread {
private BlockingQueue<Runnable> taskQueue;
public PoolThread(BlockingQueue<Runnable> queue) {
taskQueue = queue;
}
public void run() {
while (true) {
try {
taskQueue.take().run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
如果有什麼的線程來執行超過TASKQUEUE大小,數量將調用線程被阻止? ThreadPoolExecutor - 這裏我們可以看到,在這種情況下,這是一個被拒絕的執行處理程序的工作,但我仍然不明白它是如何工作的。預先感謝您的幫助。
編輯:阻塞隊列的
設置最大尺寸10