定制并发类(五)在一个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.util.concurrent.ThreadFactory类创建线程

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

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

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

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

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

ThreadFactory这个故名思义,就是一个线程工厂。用来创建线程。这里为什么要使用线程工厂呢?其实就是为了统一在创建线程时设置一些参数,如是否守护线程。线程一些特性等,如优先级。通过这个Trea...

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

1.1.源码解读ThreadFactory这个故名思义,就是一个线程工厂。用来创建线程。这里为什么要使用线程工厂呢?其实就是为了统一在创建线程时设置一些参数,如是否守护线程。线程一些特性等,如优先级。...

并发编程高级部分(Executor框架/线程池的使用)

并发编程高级部分Executor框架为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制。它们都在java.util.concurrent包中,是JDK并发包...

Java并发编程——Executor接口及线程池的使用

在如今的程序里,单线程的程序,应该已经比较少了,而Java语言是内置支持多线程并发的。本文介绍了JDK 1.5之后提供的concurrent包内提供的任务接口Callable接口和Future接口,J...

java并发编程中常用的工具类 Executor

深入理解 java执行器相关的类有:Executor ,Executors,ExecutorService。 Executor分析 Executor是一个接口,是用来执行 Runnable 任务的;它...

并发控制(8)使用executor并发框架来实现的生产消费者模型

并发控制(8)使用executor并发框架来实现的生产消费者模型executoer 本质上就是个线程池 根据具体业务场景,分为了 public static ExecutorService newFi...

分享一个使用MUILIB轻松定制的圆环界面和圆环形状的按钮

定制一个圆环窗口其实是比较简单的,原理无非就是贴一个透明圆环图片,同理,实现一个圆环形状的按钮 也是贴一个带透明通道的图片搞定,如果是这样的话,也没什么可值得分享的,且慢,其实这里面还是有些问题 ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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