java线程池简单例子

来源:互联网 发布:在淘宝开店和天猫开店 编辑:程序博客网 时间:2024/05/28 19:24
package ThreadPool;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;public class ThreadPool  {private BlockingQueue<Runnable> blockingQueue;private int poolSize;private int workSize;public ThreadPool(int size){poolSize = size;workSize = 0;blockingQueue = new LinkedBlockingQueue<Runnable>();}public synchronized void excute(Runnable t){if(workSize == poolSize){           blockingQueue.add(t);notify();}else {new Thread(new WorkThread("线程"+workSize,t)).start();workSize = workSize + 1;}}public synchronized Runnable getTask () throws InterruptedException{if(blockingQueue.size() == 0){wait();}return blockingQueue.poll();}private class WorkThread implements Runnable{private String threadName;private Runnable firstRunnable;public WorkThread(String name,Runnable t){this.firstRunnable = t;this.threadName = name;}@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){try {if(firstRunnable != null){System.out.println(threadName + "运行中");firstRunnable.run();firstRunnable =  null;}else {Runnable runnable = getTask();if(runnable == null)return;System.out.println(threadName + "运行中");runnable.run();}Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

0 0
原创粉丝点击