定制并发类(五)在一个Executor对象中使用我们的ThreadFactory

转载 2016年06月01日 09:25:55

声明:本文是《 Java 7 Concurrency Cookbook 》的第七章,作者: Javier Fernández González     译者:许巧辉

在一个Executor对象中使用我们的ThreadFactory

在前面的指南中,实现ThreadFactory接口生成自定义线程,我们引进了工厂模式和提供如何实现一个实现ThreadFactory接口的线程的工厂例子。

执行者框架(Executor framework)是一种机制,它允许你将线程的创建与执行分离。它是基于Executor、ExecutorService接口和实现这两个接口的ThreadPoolExecutor类。它有一个内部的线程池和提供一些方法,这些方法允许你提交两种任务给线程池执行。这两种任务是:

  • 实现Runnable接口的类,用来实现没有返回结果的任务
  • 实现Callable接口的类,用来实现有返回结果的任务

在执行者框架(Executor framework)的内部,它提供一个ThreadFactory接口来创建线程,这是用来产生新的线程。在这个指南中,你将学习如何实现你自己的线程类,用一个工厂来创建这个类的线程,及如何在执行者中使用这个工厂,所以这个执行者将执行你的线程。

准备工作…

阅读之前的指南,实现ThreadFactory接口生成自定义线程,并实现它的例子。

这个指南的例子使用Eclipse IDE实现。如果你使用Eclipse或其他IDE,如NetBeans,打开它并创建一个新的Java项目。

如何做…

按以下步骤来实现的这个例子:

1.将实现ThreadFactory接口生成自定义线程的指南中实现的MyThread、MyThreadFactory和MyTask类复制到这个项目中,所以你将在这个例子中继续使用它们。

2.实现这个例子的主类,通过创建Main类,并实现mian()方法。

1 public class Main {
2 public static void main(String[] args) throws Exception {

3.创建一个新的MyThreadFactory对象,名为threadFactory。

1 MyThreadFactory threadFactory=new MyThreadFactory("MyThreadFactory");

4.使用Executors类的newCachedThreadPool()方法,创建一个新的Executor对象。传入前面创建的工厂对象作为参数。这个新的Executor对象将使用这个工厂创建必需的线程,所以它将执行MyThread线程。

1 ExecutorService executor=Executors.newCachedThreadPool(threadFactory);

5.创建一个新的Task对象,并使用submit()方法将它提交给执行者。

1 MyTask task=new MyTask();
2 executor.submit(task);

6.使用shutdown()方法关闭这个执行者。

1 executor.shutdown();

7.使用awaitTermination()方法,等待执行者的结束。

1 executor.awaitTermination(1, TimeUnit.DAYS);

8.写入一条信息表明程序的结束。

1 System.out.printf("Main: End of the program.\n");

它是如何工作的…

在前面指南(实现ThreadFactory接口生成自定义线程)中的它是如何工作的部分中,你可以阅读到关于MyThread、MyThreadFactory和MyTask工作的详细解释。

在这个例子的main()方法中,你已使用Executors类的newCachedThreadPool()方法创建一个Executor对象。你已传入之前创建的工厂对象作为参数,所以已创建的Executor对象将使用这个工厂来创建它所需的线程,并且它将执行MyThread类的线程。

执行这个程序,你将看到关于线程的开始日期和它的执行时间的信息。以下截图显示了这个例子产生的输出:

3

原文地址:http://ifeve.com/customizing-concurrency-classes-5/

Java并发---- Executor并发框架--线程池,ThreadToolExecutor初步理解

对于数据库连接,我们经常听到数据库连接池这个概念。因为建立数据库连接时非常耗时的一个操作,其中涉及到网络IO的一些操作。因此就想出把连接通过一个连接池来管理。需要连接的话,就从连接池里取一个。当使用完...
  • oChangWen
  • oChangWen
  • 2016年11月05日 13:36
  • 4263

Java编程思想第四版 *第五章 个人练习

练习3:(1)创建一个带默认构造器(即无参构造器)的类,在构造器中打印一条消息。为这个类创建一个对象 练习4:(1)为前一个练习中的类添加一个重载构造器,令其接受一个字符参数,并在构造器中把你自己的信...
  • zhaoqingkaitt
  • zhaoqingkaitt
  • 2014年11月03日 10:01
  • 4189

[Java并发包学习三]ThreadFactory介绍

概述 ThreadFactory翻译过来是线程工厂,顾名思义,就是用来创建线程的,它用到了工厂模式的思想。它通常和线程池一起使用,主要用来控制创建新线程时的一些行为,比如设置线程的优先级,名字等...
  • hechurui
  • hechurui
  • 2015年10月30日 11:14
  • 1705

定制并发类(四)实现ThreadFactory接口生成自定义的线程

声明:本文是《 Java 7 Concurrency Cookbook 》的第七章,作者: Javier Fernández González     译者:许巧辉 实现ThreadFactor...
  • guomei
  • guomei
  • 2014年03月24日 00:01
  • 513

Java Executor并发框架(三)ThreadFactory介绍

一、介绍 使用 ThreadFactory 创建新线程。如果没有另外说明,则在同一个 ThreadGroup 中一律使用 Executors.defaultThreadFactory() 创建线...
  • pfnie
  • pfnie
  • 2016年10月08日 15:20
  • 282

使用java.util.concurrent.ThreadFactory类创建线程

工厂设计模式是Java中最常用的设计模式之一。它是一种创建型设计模式,能够用于创建一个或多个类所需要的对象。有了这个工厂,我们就能集中的创建对象。 集中创建方式给我们带来了一些好处,例如: 1. ...
  • rlanffy
  • rlanffy
  • 2015年01月07日 00:22
  • 1467

使用Executor代替手动的线程调度(java并发编程读书笔记五)

不使用Executor线程池: 单线程:顺序的执行任务不能提供良好的吞吐量或者快速的响应性 每任务每线程:大量线程创建,销毁,线程间切换的开销巨大,高负载下容易崩溃 Executor是基于 生...
  • wbean
  • wbean
  • 2011年11月15日 10:30
  • 1184

实现一个基于优先级的Executor类

实现一个基于优先级的Executor类 在Java并发API的第一个版本中,你必须创建和运行应用程序中的所有线程。在Java版本5中,随着执行者框架(Executor framework)的出现...
  • i_lovefish
  • i_lovefish
  • 2014年05月18日 13:59
  • 684

Spark定制班第12课:Spark Streaming源码解读之Executor容错安全性

本期内容: 1. Executor的WAL 2. 消息重放 最天然的数据容错就是利用数据副本,另外一种是数据源支持重放。 基于BlockManager来做数据备份,StorageLeve...
  • andyshar
  • andyshar
  • 2016年05月23日 17:17
  • 403

Java并发编程与技术内幕:ThreadFactory、ThreadLocal

ThreadFactory这个故名思义,就是一个线程工厂。用来创建线程。这里为什么要使用线程工厂呢?其实就是为了统一在创建线程时设置一些参数,如是否守护线程。线程一些特性等,如优先级。通过这个Trea...
  • Evankaka
  • Evankaka
  • 2016年06月20日 11:15
  • 4103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:定制并发类(五)在一个Executor对象中使用我们的ThreadFactory
举报原因:
原因补充:

(最多只允许输入30个字)