`
jsczxy2
  • 浏览: 1275501 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

java实现一个简单的线程池

阅读更多

1.首先是一个MyMethod接口,里面只有一个方法看名字就知道了,就是我要做的事情。

 

package com.test.thread;

/**
 * @author jsczxy2
 *
 */
public interface MyMethod {
	public void dosomething();
}

 

 2.然后是实现该方法的类,这个类可以自定义实现内容以完成需要放入线程池里面要做的具体事情。

 

 

package com.test.thread;

/**
 * @author jsczxy2
 *
 */
public class MyMethodImpl implements MyMethod{

	private int count;
	
	public MyMethodImpl(int count) {
		this.count = count;
	}
	
	@Override
	public void dosomething() {
		System.out.println("mymethod "+count+" in thread pool!");
	}
	
}

 

3.好了接下来是个简单线程类继承了Thread类,作用就是实例化放进线程池里面的线程,包括往里面加入dosomething具体实现,以及一个while循环实现线程的等待wait()以及通知notify()的调用来实现线程池内某线程的等待还是执行状态。重点是标记running。

 

 

package com.test.thread;

/**
 * @author jsczxy2
 *
 */
public class SimpleThread extends Thread{

	private volatile boolean running;
	
	private volatile int threadNumber;
	
	private volatile MyMethod myMethod;

	public SimpleThread() {

	}

	public SimpleThread(int number) {
		this.threadNumber = number;
		System.out.println("SimpleThread:"+threadNumber+"  start!");
	}
	
	public boolean isRunning() {
		return running;
	}

	public synchronized void setRunning(boolean running) {
		this.running = running;
		if(running)
			this.notify();
	}
	
	public void setThreadNumber(int threadNumber) {
		this.threadNumber = threadNumber;
	}

	public int getThreadNumber() {
		return threadNumber;
	}

	public synchronized void setMyMethod(MyMethod myMethod) {
		this.myMethod = myMethod;
	}
	
	public MyMethod getMyMethod() {
		return myMethod;
	}

	public synchronized void dosomething(){
		if(getMyMethod()!=null)
			getMyMethod().dosomething();
	}

	@Override
	public synchronized void run() {
		try {
			while (true) {
				if (!isRunning()) {
					System.out.println("SimpleThread:"+threadNumber+" wait!");
					this.wait();
				} else {
					System.out.println("SimpleThread:"+threadNumber+" run!");
					dosomething();
					Thread.sleep(1000L);
					setRunning(false);
				}
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

 

4.最后是线程池类,我用一个list类进行线程存储,初始化线程池时根据poolsize初始化线程加进该list,然后直接设置running为false,这样启动start()后导致初始化时所有线程池里的线程都是wait()状态,等待被通知notify()。而execute方法则查找当前线程池中空闲线程,然后把dosomething交给这个线程去处理。

 

 

package com.test.thread;

import java.util.ArrayList;
import java.util.List;

/**
 * @author jsczxy2
 *
 */
public class ThreadPool {

	private int poolsize=10;
	
	//工作线程
	private List<SimpleThread> threads = new ArrayList<SimpleThread>();
	
	public ThreadPool() {
		init();
	}
	
	public ThreadPool(int poolsize) {
		this.poolsize = poolsize;
		init();
	}
	
	private void init(){
		for(int i = 0;i < poolsize;i ++){
			SimpleThread thread = new SimpleThread(i);
			thread.setRunning(false);
			threads.add(thread);
			thread.start();
		}
	}
	
	
	public synchronized void execute(MyMethod myMethod){
		while(true){
			for(SimpleThread thread : threads){
				if(!thread.isRunning()){
					thread.setMyMethod(myMethod);
					thread.setRunning(true);
					return;
				}
			}
		}
	}
	
	
	
	public static void main(String[] args) {
		ThreadPool pool = new ThreadPool();
		for(int i=0;i<100;i++){
			pool.execute(new MyMethodImpl(i));
		}
	}
	
}
 

 

分享到:
评论

相关推荐

    Java 实现简单的线程池

    用java实现的线程池,自己是初学着,程序参考网上。

    Java实现通用线程池

    PooledThread是一个线程类,继承自Thread类,用于实现线程池中的线程;ThreadPool是一个线程池类,用于管理线程池中的线程。 ThreadTask接口定义了一个run方法,用于执行线程池任务;PooledThread类继承自Thread类...

    java聊天室,利用线程池实现多用户聊天室

    Java聊天室是一个典型的多用户实时交互系统,它利用了Java的网络编程能力以及并发处理机制,特别是线程池技术,来实现多个用户之间的同步通信。在这个项目中,我们将深入探讨如何构建这样一个聊天室,以及线程池在...

    java线程池完整代码

    部分内容中提供了一个完整的 Java 线程池实现代码,包括配置文件的解析、线程池的创建和管理等方面。 一、配置 xml 文件 配置文件 `listen.xml` 中定义了线程池的最小和最大线程数、检查线程池中线程的周期等参数...

    Java实现的线程池、消息队列功能

    标题中的“Java实现的线程池、消息队列功能”是指在Java编程中,如何利用编程技术实现线程池和消息队列这两种重要的并发处理机制。线程池和消息队列是解决多线程环境下资源管理和任务调度的有效手段,它们在高并发、...

    java实现通用的线程池

    java实现通用的线程池,这是我网上找的资料,O(∩_∩)O~希望大家能用的到。

    java实现通用线程池的代码

    本文旨在使用Java语言编写一个通用的线程池。当需要使用线程池处理事务时,只需按照指定规范封装好事务处理对象,然后用已有的线程池对象去自动选择空 闲线程自动调用事务处理对象即可。并实现线程池的动态修改...

    自定义实现Java线程池

    通过上述步骤,我们已经成功地实现了一个简单的自定义Java线程池。虽然这个实现非常基础,但它涵盖了线程池的主要设计思想和技术要点。对于更复杂的应用场景,建议使用成熟的线程池框架,如`ThreadPoolExecutor`,它...

    自定义实现Java线程池1-模拟jdk线程池执行流程1

    我们也将遵循这个设计,实现一个简单的线程池类`SampleThreadPoolExecutor`,它继承自`Executor`接口。 在`SampleThreadPoolExecutor`类中,我们需要关注以下几个关键属性: 1. `wc`: 工作中的线程数量 2. `...

    100行Java代码构建一个线程池

    在示例代码中,作者使用简单的Java代码创建了一个线程池,通过`ThreadPoolManager`类来管理线程池,并使用`SimpleThread`类作为处理任务的线程。 【示例代码分析】 1. `TestThreadPool`类是测试类,模拟客户端发送...

    Java代码构建一个线程池

    本文将详细介绍如何使用Java语言来构建一个简单的线程池,并深入分析其实现原理与关键细节。 #### 一、线程池的概念 线程池是一种基于池化技术的设计模式,其核心思想是在程序启动时创建一定数量的线程放入池中供...

    java技术学习-基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分)

    java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java...

    Java中的线程与线程池.pptx

    2. newSingleThreadExecutor:创建一个单线程线程池,所有任务都在一个线程中顺序执行,保证了任务的执行顺序。 3. newFixedThreadPool:创建一个固定大小的线程池,线程数量保持不变,任务排队等待执行。 4. ...

    java线程池封装j

    1. **定义配置参数**:创建一个配置类,包含线程池的各个参数,如核心线程数、最大线程数等。 2. **创建线程池实例**:根据配置参数,使用`ThreadPoolExecutor`构造函数创建线程池实例。 3. **提供提交任务接口**:...

    Java版线程池实现

    不过,上述代码展示的是一个自定义的线程池实现,它可能没有使用Java标准库中的`ExecutorService`。 这个自定义线程池的实现包括以下几个关键组件: 1. **线程池参数**: - `reserve`:保留线程数,这些线程不...

    java 线程池示例(自己实现的参考别人的代码)

    NULL 博文链接:https://yulincqupt.iteye.com/blog/1673919

    Java 自己实现线程池

    Java开发,Android开发,自己实现线程池,明白线程池的实现机制

Global site tag (gtag.js) - Google Analytics