package pool; public interface Request { public void execute(); }
package pool; public class HttpRequest implements Request { private String name; public HttpRequest(String name) { super(); this.name = name; } @Override public void execute() { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.err.println(Thread.currentThread().getName() + " 我执行了" + name + "....."); } }
package pool; import java.util.LinkedList; import java.util.Queue; public class PoolManager { private int maxSize; private int maxTaskSize; private LinkedList<WorkThread> workThreads = new LinkedList<WorkThread>(); private TaskQueue queue; public PoolManager(int maxSize,int maxTaskSize) { this.maxSize = maxSize; this.maxTaskSize = maxTaskSize; this.init(); } private void init(){ queue = new TaskQueue(maxTaskSize); for (int i = 0; i < maxSize; i++) { WorkThread workThread = new WorkThread("工作线程" + i ,queue); workThreads.add(workThread); } } public void start() { for (WorkThread workThread : workThreads) { workThread.start(); } } public void execute(Request request) { queue.addTask(request); } }
package pool; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; public class TaskQueue { private int maxSize; private Queue<Request> queue = new ConcurrentLinkedQueue<Request>(); public TaskQueue(int maxSize) { super(); this.maxSize = maxSize; } public void addTask(Request request) { synchronized (this) { while(queue.size() >= maxSize) { try { System.err.println("任务队列已经满了。。。。。"); this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.err.println("添加新任务到任务队列中。。。。"); queue.add(request); this.notifyAll(); } } public Request getTask() { synchronized (this) { while (queue.size() == 0) { try { System.err.println("当前任务队列为空....."); this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Request request = queue.poll(); this.notifyAll(); return request; } } }
package pool; public class WorkThread extends Thread { private TaskQueue queue; private boolean used = false; public boolean isUsed() { return used; } public WorkThread(String name,TaskQueue queue) { this.queue = queue; this.setName(name); } @Override public void run() { while (true) { used = true; Request task = queue.getTask(); task.execute(); used = false; } } }
相关推荐
Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...
java多线程,对多线程,线程池进行封装,方便使用
java多线程并发查询数据库,使用线程池控制分页,并发查询。
Java多线程-Socket编程
Java多线程--多线程相关概念
Java多线程--让主线程等待所有子线程执行完毕
Java多线程编程,生命游戏,用线程池.zipJava多线程编程,生命游戏,用线程池.zip Java多线程编程,生命游戏,用线程池.zipJava多线程编程,生命游戏,用线程池.zip Java多线程编程,生命游戏,用线程池.zipJava多...
1.委托与多线程2.线程池 Socket 3.聊天程序 模拟IIS 4.一般处理程序 11.异步无刷新分页复习+服务器端控件
Java 多线程与并发(17_26)-JUC线程池_ FutureTask详解
简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类
计算机后端-Java-Java核心基础-第20章 多线程 20. 创建多线程的方式四:使用线程池.avi
Java多线程--线程间的通信
Java多线程--线程的生命周期
Java多线程--多线程知识点总结和企业真题
Java多线程--JDK5.0新增线程创建方式
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
Java多线程--对比创建多线程的两种方式
Java多线程--线程安全问题练习题
Java多线程-多功能演示系统,连接MySQL数据库利用多线程实现信息交流,为教师提供教学服务,便于教师整理教学资料,整合所需知识内容,更好的为学生提供生动形象的理解方式,加强教师与学生之间的互动沟通。