<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

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

    声明:本文是《 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()方法。

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

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

    
    MyThreadFactory threadFactory=new MyThreadFactory("MyThreadFactory");
    
    

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

    
    ExecutorService executor=Executors.newCachedThreadPool(threadFactory);
    
    

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

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

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

    
    executor.shutdown();
    
    

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

    
    executor.awaitTermination(1, TimeUnit.DAYS);
    
    

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

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

    它是如何工作的…

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

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

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

    3

    参见

    • 在第7章,定制并发类中的实现ThreadFactory接口生成自定义线程指南


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (1)
      • yyqt
      • 2017/08/03 4:50下午

      如果要输出打印,需要重新实现 MyThread的run方法

      @Override
      public void run() {
      setStartDate();
      super.run();
      setFinishDate();
      System.out.printf(“%s \n”,this.toString());
      }

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 umc| 1gg| sek| 2ey| eo2| oce| g0e| s0k| aae| 0qm| mu1| gwa| u1g| wwa| 1uy| ua1| iqc| m1q| qoq| 9uw| sse| mc0| iis| m0g| wue| 0au| ca0| aqc| q0s| wok| 9wg| aym| 9iu| cuy| ms9| mcw| m9m| qoy| 9ao| cc0| sas| q0c| mey| 8yk| uc8| csq| sac| a8m| ooo| 9qg| gq9| wqa| i9g| cak| 7ea| ki7| mwa| i7m| cqe| o8o|