package aa;
import java.util.Random;
public
class DownThread extends Thread {
private
boolean runFlag;
public
boolean isRunFlag() {
return
runFlag;
}
public DownThread(){
System.out.println(this.getName()+"
初始化");
this.setRunFlag(false);
}
public
synchronized void setRunFlag(boolean runFlag) {
this.runFlag=runFlag;
if(runFlag)this.notify();
}
public
synchronized void run(){
while (true){
if(!this.isRunFlag()){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.println(this.getName()+"doingsomething!");
Random ran=new Random();
try{
long l=10001*(ran.nextInt(10)+1);
System.out.println("这活要干 "+l+"毫秒");
sleep(l);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(this.getName()+"done!");
this.setRunFlag(false);
System.out.println(this.getName()+"回收");
ThreadPool.removeThread(this);
}
}
}
============================================================================
package aa;
import java.util.LinkedList;
public
class ThreadPool {
final
static int MaxLength=20;
private
static LinkedList pool=null;
public ThreadPool(){
System.out.println("初始化线程池="+MaxLength);
pool=new LinkedList();
for(int i=0;i<MaxLength;i++){
DownThread thread=new DownThread();
removeThread(thread);
thread.start();
}
}
public
boolean isFull(){
return
pool.isEmpty();
}
public
void addThread(){
synchronized (pool) {
while(this.isFull()){
System.out.println("线程池满,等待中。。。。。");
try{
pool.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
DownThread thread=(DownThread)pool.removeFirst();
if(!thread.isRunFlag()){
System.out.println(thread.getName()+"is processing");
thread.setRunFlag(true);
}
}
}
public
static void removeThread(DownThread downThread) {
synchronized (pool) {
pool.addLast(downThread);
pool.notify();
}
}
public
static void main(String[] args){
ThreadPool test=new ThreadPool();
for(int i=0;i<1000;i++){
test.addThread();
}
}
package aa;
public
class TestThread extends Thread{
public
static void main(String args[]){
Runner r=new Runner();
Thread t1=new Thread(r);
Thread t2=new Thread(r);
t1.start();
t2.start();
}
}
class Runner
implements Runnable{
public Runner(){
super();
}
public
void run(){
for(int i=0;i<20;i++){
System.out.println("NO."+i);
}
}
}
分享到:
相关推荐
简单实用的java线程池实例代码。包括测试代码和工程文件。
java线程池使用后到底要关闭吗 java线程池是一种高效的并发编程技术,可以帮助开发者更好地管理线程资源,提高系统的性能和可靠性。然而,在使用java线程池时,一个常见的问题是:使用完线程池后到底要不要关闭?...
Java 中通用的线程池实例代码 Java 中通用的线程池实例代码是指在 Java 编程语言中创建一个通用的线程池实例,以便于在多线程环境下高效地执行任务。下面是该线程池实例代码的详细解释: 一、线程池的概念 在 ...
2. **创建线程池实例**:根据配置参数,使用`ThreadPoolExecutor`构造函数创建线程池实例。 3. **提供提交任务接口**:封装`ExecutorService`的`execute()`方法,对外提供统一的任务提交接口。 4. **异常处理**:...
在Java编程中,Spring框架提供了一种优雅的方式来管理和执行异步任务,这就是Spring的线程池。线程池是多线程编程中的一个重要概念,它能够有效地管理并发任务的执行,提高系统的性能和效率。本实例将深入探讨Spring...
在"MyLinuxThread"这个文件中,很可能包含了线程池的具体实现代码,可以从中学习如何在Linux环境下创建、管理和使用线程池,以及如何处理线程间的同步和通信问题。通过对这个实例的分析和实践,可以深入理解线程池的...
Java并发之串行线程池实例解析 Java并发之串行线程池实例解析是Java并发编程中非常重要的一部分,今天我们就来详细介绍如何实现一个串行的线程池实例。在介绍之前,首先我们需要了解什么是串行线程池。串行线程池是...
Java线程池是Java并发编程中的重要组件,它能够有效地管理和复用线程,从而提高程序的执行效率和降低资源消耗。在JDK 1.5版本之前,Java对线程池的支持非常有限,而在JDK 1.5之后,加入了java.util.concurrent包,...
以下是一个简单的Java线程池代码示例: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolDemo { public static void main(String[] args)...
JAVA线程池原理实例详解 JAVA线程池是java中的一种高效的线程管理机制,它可以控制线程的创建、销毁和复用,从而提高系统的性能和可靠性。下面我们将详细介绍JAVA线程池的原理、创建、使用方法及相关注意事项。 一...
要理解`java线程池threadpool简单使用源码`,你需要查看`src`目录下的Java文件,了解如何实例化`ThreadPoolExecutor`,设置相关参数,以及如何提交任务到线程池。同时,查看源码中对`ThreadGroup`的使用,理解它如何...
Java代码中展示的`ThreadPool`类是作者实现的一个简单线程池示例,使用了`LinkedList`作为工作队列,`ThreadPool`类继承了`ThreadGroup`,这在JDK 1.4版本中是一种常见实现方式。但在JDK 1.5及以上版本,推荐使用`...
JAVA线程池介绍以及简单实例,代码加文档 。原始资源连接 https://wenku.baidu.com/view/a3d09d0316fc700abb68fce9.html?from=search
在Java编程领域,实例代码是理解概念和提升技能的关键。对于初学者来说,"JAVA 实例代码_新手推荐看看"这个资源提供了丰富的实践材料,涵盖了动态编程、多线程以及数据库交互等多个重要方面。让我们逐一深入探讨这些...
"100个Java编程实例源代码"集合提供了一个全面的学习资源,覆盖了从基础概念到高级特性的广泛主题,旨在帮助初学者和有经验的开发者巩固技能,提升解决问题的能力。 1. **基础语法实例**:在这些源代码中,你可以...
在上面的代码中,我们创建了一个线程池配置类,使用 @Bean 注解创建了一个线程池实例,该实例具有 5 个核心线程,10 个最大线程,闲置线程存活 60 秒,使用 ArrayBlockingQueue 作为任务队列。 总结 在 Spring ...
Java线程池提供了丰富的策略和参数,以满足不同场景下的需求。开发者可以根据应用的特性,合理配置线程池,优化并发处理能力,提高系统的响应速度和稳定性。在Java中,除了ArrayBlockingQueue之外,还有其他的队列...
《徐明浩java编程基础应用与实例代码》是针对初学者和有一定经验的Java程序员的一份宝贵资源,它深入浅出地介绍了Java编程的基础概念和实际应用。通过徐明浩先生的专业指导,读者可以系统性地掌握Java语言的核心要素...
在Java中,`java.util.concurrent`包提供了`ThreadPoolExecutor`类,它是线程池的主要实现。下面我们将详细探讨线程池的实现原理、重要参数以及如何使用。 1. **线程池的工作流程**: - 当一个任务被提交到线程池...