關於執行緒池的執行緒複用
阿新 • • 發佈:2020-11-23
之前接觸到執行緒池之後,對執行緒複用很感興趣。但是,執行緒執行完後就會銷燬,那麼執行緒的複用又是如何實現的呢?
最近在網上找了一下相關資料,發現了一篇文章講解的比較淺顯易懂,根據該文章的思路,自己自由發揮了一下,估計大概應該就是這麼個意思吧。
BlockingQueue<Runnable> runnableQueue = new ArrayBlockingQueue<Runnable>(100); Runnable target = new Runnable() { @Override public voidrun() { for (;;) { if (!runnableQueue.isEmpty()) { Runnable runnable = runnableQueue.poll(); if (runnableQueue != null) { runnable.run(); } } } } }; Thread thread= new Thread(target); runnableQueue.put(new Runnable() { @Override public void run() { System.out.println("first"); } }); runnableQueue.put(new Runnable() { @Override public void run() { System.out.println("second"); } }); thread.start(); runnableQueue.put(new Runnable() { @Override public void run() { System.out.println("third"); } });
Runnable被提交進任務佇列中,執行緒反覆檢測佇列中是否有可執行任務,若有則執行出隊操作,並在自己的run方法中呼叫任務的run方法。