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多线程和Socket编程的理解,还能提高解决实际问题的能力,为后续更深入地学习其他高级话题打下良好的基础。
《Java多线程设计模式详解》是一本深入探讨Java并发编程和设计模式的专业书籍,它涵盖了多线程环境下的各种核心概念、最佳实践以及常见问题的解决方案。这本书旨在帮助开发者在实际开发过程中更好地理解和应用多线程...
通过这个压缩包中的源代码和说明资料,学习者可以对Java多线程有深入的实践,不仅理解理论知识,还能动手编写多线程程序,解决实际问题。通过不断练习和实践,将有助于提升在并发编程方面的技能。
Java多线程是Java编程中的核心概念,尤其在并发编程领域,它的重要性不言而喻。清华大学作为国内顶尖的高等教育机构,在计算机...因此,不仅要理解概念,更要动手编写和调试代码,才能真正成为Java多线程编程的高手。
这个"安全产品开发实践并发服务器-多线程-内含源码和说明书(可自己修改).zip"压缩包提供了丰富的学习资源,包括源代码和详细的说明文档,允许用户根据自身需求进行修改和定制。 首先,我们要了解并发服务器的概念。...
《深入理解Java多线程、反射、泛型与正则表达式》 在Java编程领域,多线程、反射、泛型以及正则表达式是四个至关重要的概念,它们为开发者提供了强大的工具,使得程序更加高效、灵活且可维护。这份学习资料包括了...
《自己动手写网络爬虫》是清华大学推出的一门课程,主要教授如何使用Java语言来构建网络爬虫。网络爬虫是一种自动抓取互联网信息的程序,对于数据分析、搜索引擎优化、市场研究等领域都有着重要的应用。本课程的源码...
本资源是由知名讲师张孝祥老师提供的关于多线程的实例教程,旨在帮助学习者深入理解和熟练掌握Java多线程的相关知识。通过这份资料,你将有机会接触到各种线程类的实例,从而提升你的编程能力。 1. **Java多线程...
线程同步是Java多线程编程中至关重要的部分,防止了数据竞争和不一致。Java提供了多种同步机制,包括synchronized关键字、wait()和notify()方法、Lock接口(如ReentrantLock)以及Semaphore等。synchronized用于控制...
多线程是指在一个程序内同时运行多个线程,每个线程都独立地执行自己的任务。在Java、Python、C++等编程语言中,都有内置的多线程支持。通过多线程,我们可以充分利用多核处理器的优势,提高程序的响应速度和整体...
在编程领域,多线程是实现并发执行任务的关键技术,尤其在现代计算机系统中,它能够充分利用硬件资源,提高程序的执行效率...现在,你可以通过阅读提供的“多线程教程”进一步深化理解,动手实践,提升自己的编程技能。
在IT领域,多线程是程序设计中的一个重要概念,尤其对于服务器端开发和高并发应用来说,理解并熟练掌握多线程技术至关重要。本资源包针对初学者提供了全面的多线程学习资料,旨在帮助你快速入门并解决实际开发中的...
- **多线程编程**:线程创建与管理、同步机制、线程池等。 ##### 4. 代码复用与模块化 - **设计模式**:单例模式、工厂模式、观察者模式等经典设计模式的应用场景。 - **模块化开发**:将大型项目分解为可独立开发...
在IT领域,多线程是程序设计中的一个重要概念,尤其在现代计算机系统中,多核处理器的普及使得多线程编程成为了提升系统性能的关键技术。本资源“自学多线程demo代码”旨在帮助学习者理解和实践多线程编程,通过实际...
理解线程池和Handler机制也有助于优化多线程操作。 8. **网络编程**:使用HttpURLConnection、OkHttp或Retrofit库进行HTTP请求,获取网络数据。理解异步请求和处理JSON或XML数据的方法。 9. **权限管理**:Android...
7. **并发编程**:在处理网络连接时,多线程和并发控制是必不可少的。书中可能讲解了线程池、同步机制(synchronized、Lock)、并发集合等,帮助开发者编写高效的网络服务。 8. **安全性**:网络安全是关键,书中...
通过分析和学习这个示例代码,你可以深入理解线程池的内部工作原理,并能动手实现自己的线程池。线程池的优化是一个持续的过程,可以根据实际应用需求进行调整,如动态调整线程池大小、优化任务调度算法等,以达到...
当我们谈论“自己动手写Tomcat”时,我们实际上是在探讨如何理解和实现一个小型的Web服务器,就像Apache Tomcat那样。Tomcat是一款开源的Java Servlet容器,它实现了Java EE(现在称为Jakarta EE)中的Servlet、JSP...
- **线程安全问题:** 如何避免共享资源访问冲突,确保多线程环境下的数据一致性。 - **核心API:** - **synchronized关键字:** 实现对象或代码块级别的独占锁,用于保证线程安全。 - **Lock接口:** 更灵活的...
4. 常见并发工具类:如Semaphore、CountDownLatch、CyclicBarrier等,用于协调多线程间的协作。 八、网络编程 1. Socket通信:介绍TCP和UDP协议,以及Socket和ServerSocket类的使用。 2. HTTP协议:简单讲解HTTP...