接上篇 [url] 繼續討論執行緒池
jdk5也提供了執行緒池 而且非常簡單
[code]executorservice pool = executors.newfixedthreadpool(4); //建立執行緒池 4個工作執行緒
pool.execute(new runnabletask()); //向任務佇列新增任務,任務是乙個runnbale的實現類
pool.shutdown();//停止工作執行緒[/code]
看一下 這兩句
[code]pool.execute(new runnabletask()) //runnabletask implements runnable
//這句是在上篇文章中
pool.addtask(new ******task(new mymanager(), i)) //******task implements task [/code]
看出什麼不同了嗎? [color=blue]jdk5實現的是runnble介面 也就是說它的每個任務又是乙個執行緒?是這樣嗎? 不是[/color]
讓我們看看是怎麼實現的吧
[code]/**
* run a single task between before/after methods.
*/private void runtask(runnable task) catch(runtimeexception ex)
} finally
}[/code]
請注意task.run(); 這句, 這兒並沒有啟動執行緒 而是簡單的呼叫了乙個普通物件的乙個方法
runtask方法是在工作執行緒(worker)中呼叫的
[code]
/*** worker threads
*/private class worker implements runnable
} catch(interruptedexception ie) finally
}}[/code]
jdk5的開發人員也真夠省的,多建立乙個任務介面多好理解啊, 非要用runnable介面 誤導我們。
以上的**片段都節選自jdk5中threadpoolexecutor
JDK5新特性 列舉
一些程式在執行時,他需要的資料不能是任意的,而必須是一定範圍內的值,jdk5以前採用自定義類來解決,jdk5以後可以直接採用列舉解決。在jdk5之後,使用enum關鍵字定義一種新的型別,稱為列舉型別。enum類和enum關鍵字 使用enum關鍵字定義的列舉類,實際上就相當於定義了乙個類,此類繼承了e...
JDK5提供的阻塞佇列
jdk5的concurrent包裡面盡是寶貝,還好我有的是時間,正好可以一一八來。以前用多執行緒處理 生產者 消費者 問題的時候,需要採用wait,notify,現在有了這些阻塞佇列,就可以把這些wait,notify拋一邊,輕易的就能解決問題。首先是synchronousqueue,這個佇列裡面只...
JDK5新增的鎖機制
jdk5開始新增了兩種鎖機制 reentrantreadwritelock和reentrantlock。對於reentrantreadwritelock鎖機制 1 重入方面其內部的writelock可以獲取readlock,但是反過來readlock想要獲得writelock則永遠都不要想。2 wr...