接口
/**
* Project Name:chenxun-framework-start
* File Name:ThreadPool.java
* Package Name:com.chenxun.framework.test
* Date:2016年9月2日下午1:51:44
* Copyright (c) 2016, www midaigroup com Technology Co., Ltd. All Rights Reserved.
*
*/
package com.chenxun.framework.test;
/**
* ClassName:ThreadPool <br/>
* Function: TODO ADD FUNCTION. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2016年9月2日 下午1:51:44 <br/>
* @author 陈勋
* @version
* @since JDK 1.7
* @see
*/
public interface ThreadPool<Job extends Runnable> {
/**
*
* execute:(执行job). <br/>
* @author 陈勋
* @param job
* @since JDK 1.7
*/
void execute(Job job);
/**
*
* shutdown:(关闭线程池). <br/>
*
* @author 陈勋
* @since JDK 1.7
*/
void shutdown();
/**
*
* addWorkers:(增加工作者线程). <br/>
* @author 陈勋
* @param num
* @since JDK 1.7
*/
void addWorkers(int num);
/**
*
* removeWorker:(减少工作者线程). <br/>
* @author 陈勋
* @param num
* @since JDK 1.7
*/
void removeWorker(int num);
/**
*
* getJobSize:(获取等待执行的任务数量). <br/>
*
* @author 陈勋
* @return
* @since JDK 1.7
*/
int getJobSize();
}
接口实现
/**
* Project Name:chenxun-framework-start
* File Name:DefualtThreadPool.java
* Package Name:com.chenxun.framework.test
* Date:2016年9月2日下午1:55:35
* Copyright (c) 2016, www midaigroup com Technology Co., Ltd. All Rights Reserved.
*
*/
package com.chenxun.framework.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
/**
* ClassName:DefualtThreadPool <br/>
* Function: TODO ADD FUNCTION. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2016年9月2日 下午1:55:35 <br/>
* @author 陈勋
* @version
* @since JDK 1.7
* @see
*/
public class DefualtThreadPool<Job extends Runnable> implements ThreadPool<Job > {
//线程池最大限制数
private static final int MAX_WORKER_NUMBERS=10;
//线程池默认数量
private static final int DEFAULT_WORKER_NUMBERS=5;
//线程池最小连接数量
private static final int MIN_WORKER_NUMBERS=1;
//工作列表
private final LinkedList<Job> jobs=new LinkedList<Job>();
//工作者列表
private final List<Worker> workers=Collections.synchronizedList(new
ArrayList<Worker>());
private int workerNum=MIN_WORKER_NUMBERS;
//线程编号生成
private AtomicLong threadNum=new AtomicLong();
public DefualtThreadPool(){
initializeWorkers(DEFAULT_WORKER_NUMBERS);
}
public DefualtThreadPool(int num){
workerNum= num>MAX_WORKER_NUMBERS&&num<MIN_WORKER_NUMBERS?num:DEFAULT_WORKER_NUMBERS;
initializeWorkers(num);
}
@Override
public void execute(Job job) {
if(job!=null){
//添加一个工作,然后进行通知
synchronized (jobs) {
jobs.addLast(job);
jobs.notify();
}
}
}
@Override
public void shutdown() {
for(Worker worker:workers){
worker.shutdown();
}
}
@Override
public void addWorkers(int num) {
synchronized (jobs) {
if(num+this.workerNum>MAX_WORKER_NUMBERS){
num=MAX_WORKER_NUMBERS-this.workerNum;
}
initializeWorkers(num);
this.workerNum+=num;
}
}
@Override
public void removeWorker(int num) {
synchronized (jobs) {
if(num>=this.workerNum){
throw new IllegalArgumentException("beyond workNum");
}
int count=0;
while(count<num){
Worker worker=workers.get(count);
if(workers.remove(worker)){
worker.shutdown();
count++;
}
this.workerNum-=count;
}
}
}
@Override
public int getJobSize() {
return jobs.size();
}
private void initializeWorkers(int num){
for(int i=0;i<num;i++){
Worker worker=new Worker();
workers.add(worker);
Thread thread = new Thread(worker,"ThreadPool-Worker"+threadNum.incrementAndGet());
thread.start();
}
}
class Worker implements Runnable{
private volatile boolean running=true;
@Override
public void run() {
while(running){
Job job=null;
synchronized (jobs) {
while(jobs.isEmpty()){
try {
jobs.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
}
job=jobs.removeFirst();
}
if(job!=null){
try{
job.run();
}catch (Exception e) {
}
}
}
}
public void shutdown(){
running=false;
}
}
}
分享到:
相关推荐
Java线程池是一种高效管理并发任务执行的机制,它通过预先创建并维护一定数量的线程,从而避免了频繁地创建和销毁线程所带来的性能开销。在Java中,线程池的实现主要依赖于`java.util.concurrent`包中的`...
Java内置的`java.util.concurrent`包提供了一个强大的线程池实现——`ExecutorService`,通过`ThreadPoolExecutor`类可以自定义线程池配置。线程池通常包含核心线程数、最大线程数、线程空闲时间、工作队列等参数,...
在Android中,我们可以使用Java的`java.util.concurrent`包中的`ExecutorService`和相关的类来创建和管理线程池。常见的线程池实现有`ThreadPoolExecutor`,它允许我们自定义线程池的核心参数,如核心线程数、最大...
在Java数据库连接(JDBC)中,线程池是一种优化数据库操作的重要技术。线程池可以提高应用程序的性能,减少创建和销毁线程的开销,同时管理并发访问数据库的多个请求。本实例中,我们将重点讨论如何使用C3P0这个开源...
总结,这个"Java/Android线程池演示Demo"旨在通过实例展示如何在Android和Java项目中使用线程池进行并发处理,帮助开发者理解线程池的工作原理和优势,以及如何根据应用需求配置和管理线程池。通过分析和实践这个...
本示例"Android开发中线程池的使用Demo"将深入探讨如何在Android项目中有效利用线程池。 首先,我们需要了解Java中的ExecutorService接口,它是线程池的核心接口。通过ExecutorService,我们可以提交Runnable或...
springboot线程池使用的一个demo,注解开发,很简单,下载即用
Java中,我们通常使用`Executors`类提供的静态工厂方法来创建线程池,如`newFixedThreadPool(int nThreads)`创建固定大小的线程池,`newSingleThreadExecutor()`创建只有一个线程的线程池,`newCachedThreadPool()`...
在Android中,常见的线程池实现是`java.util.concurrent.ThreadPoolExecutor`,我们可以根据实际需求设置核心线程数、最大线程数、线程存活时间以及时间单位。`ThreadPoolExecutor`还提供了`execute()`方法来提交...
在Java和Android开发中,多线程和线程池是两个关键的概念,它们对于提高程序的执行效率和优化系统资源的使用至关重要。本教程将深入探讨这两个主题,并通过一个名为"ThreadPoolDemo"的示例代码来阐述其核心原理和...
这个“binder线程池demo”是基于《开发艺术探索》一书中的示例,旨在帮助开发者理解如何在Android环境中有效地利用线程池进行IPC操作。以下是对这个主题的详细解释: 1. **Binder基础**:Binder是Android系统特有的...
线程池是Java多线程编程中一个非常重要的概念,它可以帮助我们有效地管理和控制并发执行的线程,提高系统的资源利用率并保持系统稳定性。在Java中,`java.util.concurrent`包提供了线程池的实现,如`ExecutorService...
本文将详细探讨在Spring框架中如何配置和使用线程池,并通过一个简单的示例——"Spring线程池demo"来展示其实现过程。 首先,我们需要了解线程池的基本原理。线程池通过预先创建一定数量的线程,当有任务需要执行时...
Java线程池是一种高效管理线程的技术,它允许开发者预定义一组线程,这些线程可以重复使用,减少了创建和销毁线程的开销。在Java中,`java.util.concurrent` 包提供了线程池的相关实现,其中ExecutorService是线程池...
Java中的线程池是由`java.util.concurrent`包中的`ExecutorService`接口及其实现类如`ThreadPoolExecutor`提供的。线程池可以有效地管理和控制并发执行的任务数量,避免频繁创建和销毁线程带来的性能开销。通过设置...
线程池是Java并发编程中的重要概念,它是一种线程使用模式,用于高效地管理和执行大量并发任务。...`rxjavademo`这个Demo将帮助你更深入地理解如何在实际项目中运用线程池,以及结合RxJava进行异步编程。
java线程池处理多并发,所有进程执行完后再统一处理结果线程池配置类多线程并行demo 线程池配置类 import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation....
Java的ExecutorService和ThreadPoolExecutor提供了线程池的概念,它可以有效地管理和控制线程,避免大量创建和销毁线程带来的开销。通过ThreadPoolExecutor,我们可以定制线程池的大小、存活时间、任务队列等参数,...
本示例"简单的Java线程demo"旨在帮助初学者理解如何在Java中创建和管理线程。 在Java中,有两种主要的方式来创建线程:继承Thread类和实现Runnable接口。下面我们将详细讨论这两个方法。 1. 继承Thread类: 当一个...