`
brofe
  • 浏览: 233484 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDK 5.0 自带线程池学习

    博客分类:
  • Java
阅读更多

根据《精通Spring企业应用开发详解》中Concurrent章节整理。

 

了解JDK1.5Executor

 

    java.util.concurrent.Executor 接口主要目的是将任务提交任务执行两者分离解耦。该接口定义了任务提交的方法,实现者可以提供不通的任务运行机制,解决具体的线程使用规则、调度方式等。

   

    Executor 只有一个方法:void executeRunnable cmd),它接受实现了Runnable接口的实例,该实例代表了一个需要执行的任务。调用者可以通过如下伪代码提交任务:

       

 

Executor exe = anExecutor;

exe.execute(new RunnableTask01()); // 任务一

exe.execute(new RunnableTask02()); // 任务二

 

备注:通过线程池统一管理不通任务的执行。

 

    Executor 本身并没有要求实现者已何种方式运行这些任务,一个简单的实现类就可以在接受任务时,在主线程中运行它们。如下伪代码:

 

 

public class SimpleExecutor implements Executor {

    public void execute(Runnable runnable) {

        runnable.run(); // 提交任务后直接在主线程中执行

    }

}

 

    但大多数情况下,任务并非在主线程下运行,它们需要在其他线程中运行,下列伪代码稍微有意义些:

 

 

public class SimpleExecutor implements Executor {

   

    public void execute(Runnable runnable) {

        new Thread(runnable).start(); // 提交任务后,在其他线程中执行

    }

}

 

Executor 接口引入了两个子接口:ExecutorService ScheduledExecutorService

Ø  ExecutorService 接口添加了结束任务的管理方法,此外在提交任务时可获取一个Future实例,以便通过他跟踪异步任务的运行情况。

Ø  ScheduledExecutorService 接口可以对任务进行调度,如指定执行的延迟时间和运行周期。

 

JDK5.0 本身提供的ThreadPoolExecutor 类实现了ExecutorExecutorService这两个接口,它使用一个线程池对任务进行调度。对于处理一些数量巨大的短小并发任务,采用线程池可以带来明显好处(诸如Web服务器、DB服务器、邮件服务器之类的应用需要处理来自远程的大量短小任务)。此外,通过调整线程池中的参数,让人物的数目超过某个阀值时,强制其他任何新的任务阻塞等待,直到获得一个线程来处理为止,从而防止资源无限占用。ThreadPoolExecutor 的子类ScheduledThreadPoolExecutor 实现了ScheduleExecutorService接口。

 

    java.util.concurrent 该包中通过一个综合性工厂类Executors来创建上述这些线程池接口的实例:

Ø  static ExecutorService newFixedThreadPool(int poolSize) :创建一个可重用固定线程数的线程池,以共享边界队列的方式来运行这些线程。

Ø  static ExecutorService newCachedThreadPool(): 线程池是动态的,不够用时创建新的线程,长时间不用的线程将被收回。

Ø  static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory tf): 创建一个线程池,它可以安排在给定延迟后运行命令或者定期执行。

 

下面是稍微具体的Demo

 

 

package com.brofe.concurrent;

 

import java.util.concurrent.Executor;

import java.util.concurrent.Executors;

 

public class ExecutorExample {

 

    private Executor executor = null; // 声明一个执行器,提供Setter方法

   

    private static int poolSize = 3; // 线程池中固定的线程数量

 

    /**

     * 用执行器执行多个任务

     */

    public void executeTasks() {

       for (int i = 0; i < 9; i++) {

           executor.execute(new SimpleTask("任务" + i));

       }

    }

 

    public void setExecutor(Executor executor) {

       this.executor = executor;

    }

   

    public static void main(String[] args) {

       ExecutorExample example = new ExecutorExample();

       example.setExecutor(Executors.newFixedThreadPool(poolSize));

      

       example.executeTasks();

    }

}

 

/**

 * 任务类

 */

class SimpleTask implements Runnable {

 

    private String taskName = null;

   

    public SimpleTask(String taskName) {

       this.taskName = taskName;

    }

   

    public void run() {

       System.out.println("执行名为: " + taskName + " 的线程。 线程编号为: " + Thread.currentThread().getId() );

    }

}

 

执行结果为:

 

执行名为: 任务0 的线程。 线程编号为: 8

执行名为: 任务3 的线程。 线程编号为: 8

执行名为: 任务4 的线程。 线程编号为: 8

执行名为: 任务5 的线程。 线程编号为: 8

执行名为: 任务6 的线程。 线程编号为: 8

执行名为: 任务7 的线程。 线程编号为: 8

执行名为: 任务8 的线程。 线程编号为: 8

执行名为: 任务1 的线程。 线程编号为: 9

执行名为: 任务2 的线程。 线程编号为: 10

 

可见这是10个任务共享了线程池中的三个线程。

 

   

 

分享到:
评论

相关推荐

    JDK 5.0.zip

    **JDK 5.0** 是Java开发工具集(Java Development Kit)的一个重要版本,它在Java编程领域具有里程碑式的意义。此版本的发布在2004年,带来了许多新特性和改进,极大地提升了Java语言的开发效率和程序性能。下面我们...

    良葛格java jdk 5.0学习笔记

    良葛格java jdk 5.0学习笔记,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip。

    JDK5.0_下载-安装-配置

    在JDK5.0环境下,编写第一个Java程序"HelloWorld"是学习Java的常见起点。以下是一个简单的"HelloWorld"程序示例: ```java public class HelloWorld { public static void main(String[] args) { System.out....

    JDK自带线程池分析

    JDK自带线程池分析 JDK 自带线程池是 Java 语言中用于管理和执行线程的工具,旨在提高多线程编程的效率和灵活性。本文将详细介绍 JDK 自带线程池的组成、创建方法、优点和常见应用场景。 多线程技术 多线程技术是...

    良葛格JDK5.0学习笔记

    《良葛格JDK5.0学习笔记》是一份详细记录了Java开发工具包(JDK)5.0版本核心特性和技术要点的学习资料。这份笔记涵盖了Java编程语言的重要更新和改进,对于深入理解JDK5.0及其对Java开发的影响至关重要。 1. **...

    良葛格————JavaJDK5.0学习笔记PDF

    良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...

    良葛格Java JDK 5.0学习笔记

    Java JDK 5.0是Java发展历程中的一个重要里程碑,它引入了许多新特性,极大地提升了开发效率和代码质量。..."良葛格Java JDK 5.0学习笔记"这份资料应该会详细解释这些概念,为初学者提供宝贵的参考资料。

    良葛格Java JDK 5.0学习笔记[可打印]

    良葛格的Java JDK 5.0学习笔记是一份宝贵的资源,适合初学者和有经验的开发者回顾这个版本的关键概念。下面我们将详细探讨Java JDK 5.0中的核心知识点。 1. **泛型(Generics)** 泛型是JDK 5.0引入的一项重要特性...

    JAVA(JDK5.0)学习笔记

    ### JAVA(JDK5.0)学习笔记:深入理解数组与对象的关系 在深入探讨JAVA(JDK5.0)中数组的特性和应用之前,我们首先需要认识到数组在Java中的地位和作用远超于传统编程语言中纯粹的数据集合概念。数组在Java中被视为...

    (Java 2 SDK)JDK 5.0 的源代码

    以上就是JDK 5.0中的一些关键特性,这些源代码的分析有助于深入理解Java平台的工作原理,对于学习和优化Java代码具有重要的价值。通过阅读和研究这些源文件,开发者可以更好地掌握Java编程的精髓,提升自己的编程...

    jdk5.0 tomcat5.0配置全攻略

    本篇文章旨在帮助那些在Java学习过程中遇到环境配置问题的朋友,提供一份详尽的JDK 5.0 和 Tomcat 5.0 的安装与配置指南。 #### JDK 5.0 安装与配置 1. **下载JDK 5.0**: - 访问Sun官方站点...

    良葛格Java JDK 5.0学习笔记ch05

    在这个"良葛格Java JDK 5.0学习笔记ch05"中,我们将深入探讨其中的关键知识点。 一、泛型 Java 5.0引入了泛型,这是一项强大的类型安全机制,允许在编译时检查类型。泛型可以应用于类、接口和方法,通过指定参数...

    JDK 5.0中文版API

    这份JDK 5.0中文版API文档是学习Java不可或缺的参考资料,通过详细解释每个类、接口和方法,可以帮助开发者迅速定位并理解所需功能。配合实际编程练习,可以加深对API的理解和运用。 ### 总结 JDK 5.0中文版API...

    jdk 5.0 ban

    Java Development Kit..."rumenjingdianjdk"这个文件可能是某个教程或示例代码,用于帮助学习和理解JDK 5.0中的新特性和用法。对于初学者来说,通过实践这些示例,可以更好地掌握JDK 5.0的更新内容,提升编程技能。

    jdk5.0新特性

    ### JDK 5.0新特性详解 #### 一、自动装箱与自动拆箱 在JDK 5.0中,引入了一个非常实用的功能——自动装箱和自动拆箱,这极大地方便了开发者在处理基本数据类型和它们对应的封装类之间的转换。以前,我们可能需要...

    ibm JDK5.0 fro linux

    ibm JDK5.0 fro linux,这个东西很难下的。

    Java JDK 5.0学习笔记:TP312JA L393.iso

    Java JDK 5.0学习笔记:TP312JA L393.iso 随书光盘,欢迎大家下载 大家共享^A^

    JDK5.0的11个主要新特征

    JDK5.0是Java开发的一个重要里程碑,它引入了11个主要的新特性,极大地提升了编程效率和代码安全性。以下是对这些特性的详细说明: 1. 泛型(Generic) 泛型的引入是为了解决类型安全问题,避免在运行时进行不必要...

    Java JDK 5.0学习笔记

    Java JDK 5.0是Java发展历程中的一个重要里程碑,它的发布带来了许多创新特性和改进,极大地提升了开发效率和代码质量。本学习笔记旨在帮助新手全面理解并掌握Java 5.0的关键知识点。 一、泛型(Generics) Java ...

Global site tag (gtag.js) - Google Analytics