关于线程池的线程复用
之前接触到线程池之后,对线程复用很感兴趣。但是,线程执行完后就会销毁,那么线程的复用又是如何实现的呢?
最近在网上找了一下相关资料,发现了一篇文章讲解的比较浅显易懂,根据该文章的思路,自己自由发挥了一下,估计大概应该就是这么个意思吧。
BlockingQueue<Runnable> runnableQueue = new ArrayBlockingQueue<Runnable>(100); Runnable target = new Runnable() { @Override public void run() { 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方法。