一个简单的线程池实现

来源:互联网 发布:jquery 对象转json 编辑:程序博客网 时间:2024/05/16 23:42
public class ThreadPool {private AtomicInteger maxSize;private BlockingQueue<Runnable> taskQueue;private List<TaskThread> threads=null;private static ThreadPool instance =null;private static Lock lock=new ReentrantLock();private ThreadPool(int maxSize){this.maxSize=new AtomicInteger(maxSize);threads=new ArrayList<TaskThread>();this.taskQueue=new LinkedBlockingDeque<Runnable>();initThread();}private void initThread(){for(int i=0;i<this.maxSize.get();i++){TaskThread thread=new TaskThread();threads.add(thread);thread.start();}}public static ThreadPool getInstance(int maxSize){lock.lock();try{if(instance==null){instance =new ThreadPool(maxSize);}return instance;}finally{lock.unlock();}}public boolean submitJob(Runnable runable){taskQueue.add(runable);return true;}private class TaskThread extends Thread{@Overridepublic void run() {while(true){try {Runnable run=taskQueue.take();run.run();} catch (InterruptedException e) {e.printStackTrace();}}}}public static void main(String[] args) {ThreadPool pool=ThreadPool.getInstance(10);for(int i=0;i<100;i++){pool.submitJob(new Thread() {public void run() {System.out.println(this.currentThread().getName());try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});}}}

0 0