`
qq466862016
  • 浏览: 128194 次
  • 来自: 杭州
社区版块
存档分类
最新评论

Java多线程-自己动手写个线程池

阅读更多
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多线程和Socket编程的理解,还能提高解决实际问题的能力,为后续更深入地学习其他高级话题打下良好的基础。

    java多线程设计模式详解(PDF及源码)

    《Java多线程设计模式详解》是一本深入探讨Java并发编程和设计模式的专业书籍,它涵盖了多线程环境下的各种核心概念、最佳实践以及常见问题的解决方案。这本书旨在帮助开发者在实际开发过程中更好地理解和应用多线程...

    Java多线程应用练习源代码及相关说明资料

    通过这个压缩包中的源代码和说明资料,学习者可以对Java多线程有深入的实践,不仅理解理论知识,还能动手编写多线程程序,解决实际问题。通过不断练习和实践,将有助于提升在并发编程方面的技能。

    java多线程 清华大学独特详细讲解源代码

    Java多线程是Java编程中的核心概念,尤其在并发编程领域,它的重要性不言而喻。清华大学作为国内顶尖的高等教育机构,在计算机...因此,不仅要理解概念,更要动手编写和调试代码,才能真正成为Java多线程编程的高手。

    安全产品开发实践并发服务器-多线程-内含源码和说明书(可自己修改).zip

    这个"安全产品开发实践并发服务器-多线程-内含源码和说明书(可自己修改).zip"压缩包提供了丰富的学习资源,包括源代码和详细的说明文档,允许用户根据自身需求进行修改和定制。 首先,我们要了解并发服务器的概念。...

    基于Java的源码-多线程反射泛型及正则表达式学习笔记和源码.zip

    《深入理解Java多线程、反射、泛型与正则表达式》 在Java编程领域,多线程、反射、泛型以及正则表达式是四个至关重要的概念,它们为开发者提供了强大的工具,使得程序更加高效、灵活且可维护。这份学习资料包括了...

    清华大学基于Java语言的《自己动手写网络爬虫》 全部源码 共10个章节.rar

    《自己动手写网络爬虫》是清华大学推出的一门课程,主要教授如何使用Java语言来构建网络爬虫。网络爬虫是一种自动抓取互联网信息的程序,对于数据分析、搜索引擎优化、市场研究等领域都有着重要的应用。本课程的源码...

    多线程实例+源代码

    本资源是由知名讲师张孝祥老师提供的关于多线程的实例教程,旨在帮助学习者深入理解和熟练掌握Java多线程的相关知识。通过这份资料,你将有机会接触到各种线程类的实例,从而提升你的编程能力。 1. **Java多线程...

    eclipse项目java线程实例

    线程同步是Java多线程编程中至关重要的部分,防止了数据竞争和不一致。Java提供了多种同步机制,包括synchronized关键字、wait()和notify()方法、Lock接口(如ReentrantLock)以及Semaphore等。synchronized用于控制...

    简单多线程实例简单多线程实例简单多线程实例

    多线程是指在一个程序内同时运行多个线程,每个线程都独立地执行自己的任务。在Java、Python、C++等编程语言中,都有内置的多线程支持。通过多线程,我们可以充分利用多核处理器的优势,提高程序的响应速度和整体...

    多线程教程+实例讲解

    在编程领域,多线程是实现并发执行任务的关键技术,尤其在现代计算机系统中,它能够充分利用硬件资源,提高程序的执行效率...现在,你可以通过阅读提供的“多线程教程”进一步深化理解,动手实践,提升自己的编程技能。

    多线程的学习资料(对初学者特别有用)!

    在IT领域,多线程是程序设计中的一个重要概念,尤其对于服务器端开发和高并发应用来说,理解并熟练掌握多线程技术至关重要。本资源包针对初学者提供了全面的多线程学习资料,旨在帮助你快速入门并解决实际开发中的...

    Mark Watson Java Programming 10-Minute Solutions

    - **多线程编程**:线程创建与管理、同步机制、线程池等。 ##### 4. 代码复用与模块化 - **设计模式**:单例模式、工厂模式、观察者模式等经典设计模式的应用场景。 - **模块化开发**:将大型项目分解为可独立开发...

    自学多线程demo代码

    在IT领域,多线程是程序设计中的一个重要概念,尤其在现代计算机系统中,多核处理器的普及使得多线程编程成为了提升系统性能的关键技术。本资源“自学多线程demo代码”旨在帮助学习者理解和实践多线程编程,通过实际...

    Android-JAVA-案例-60全.zip

    理解线程池和Handler机制也有助于优化多线程操作。 8. **网络编程**:使用HttpURLConnection、OkHttp或Retrofit库进行HTTP请求,获取网络数据。理解异步请求和处理JSON或XML数据的方法。 9. **权限管理**:Android...

    java网络编程-孙卫琴 书籍源代码 (17个章节项目)

    7. **并发编程**:在处理网络连接时,多线程和并发控制是必不可少的。书中可能讲解了线程池、同步机制(synchronized、Lock)、并发集合等,帮助开发者编写高效的网络服务。 8. **安全性**:网络安全是关键,书中...

    linux下线程池

    通过分析和学习这个示例代码,你可以深入理解线程池的内部工作原理,并能动手实现自己的线程池。线程池的优化是一个持续的过程,可以根据实际应用需求进行调整,如动态调整线程池大小、优化任务调度算法等,以达到...

    自己动手写Tomcat

    当我们谈论“自己动手写Tomcat”时,我们实际上是在探讨如何理解和实现一个小型的Web服务器,就像Apache Tomcat那样。Tomcat是一款开源的Java Servlet容器,它实现了Java EE(现在称为Jakarta EE)中的Servlet、JSP...

    JAVA高质量并发详解,多线程并发深入讲解

    - **线程安全问题:** 如何避免共享资源访问冲突,确保多线程环境下的数据一致性。 - **核心API:** - **synchronized关键字:** 实现对象或代码块级别的独占锁,用于保证线程安全。 - **Lock接口:** 更灵活的...

    java学习笔记-老师的课程笔记

    4. 常见并发工具类:如Semaphore、CountDownLatch、CyclicBarrier等,用于协调多线程间的协作。 八、网络编程 1. Socket通信:介绍TCP和UDP协议,以及Socket和ServerSocket类的使用。 2. HTTP协议:简单讲解HTTP...

Global site tag (gtag.js) - Google Analytics