<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>

    线程执行者(三)创建一个大小固定的线程执行者

    声明:本文是《 Java 7 Concurrency Cookbook 》的第四章,作者: Javier Fernández González ? ? 译者:许巧辉 ? ? 校对:方腾飞,叶磊

    创建一个大小固定的线程执行者

    当你使用由Executors类的 newCachedThreadPool()方法创建的基本ThreadPoolExecutor,你会有执行者运行在某一时刻的线程数的问题。这个执行者为每个接收到的任务创建一个线程(如果池中没有空闲的线程),所以,如果你提交大量的任务,并且它们有很长的(执行)时间,你会使系统过载和引发应用程序性能不佳的问题。

    如果你想要避免这个问题,Executors类提供一个方法来创建大小固定的线程执行者。这个执行者有最大线程数。 如果你提交超过这个最大线程数的任务,这个执行者将不会创建额外的线程,并且剩下的任务将会阻塞,直到执行者有空闲线程。这种行为,保证执行者不会引发应用程序性能不佳的问题。

    在这个指南中,你将继续学习怎样创建一个大小固定的线程执行者,然后修改本章第一个示例的实现。

    准备工作…

    你应该事先阅读本章的创建线程执行者指南,并且实现所有演示的示例,因为接下来你需要继续修改这些示例。

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

    如何做…

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

    1.实现本章第一个指南描述的示例,打开Server类,修改它的构造器。使用newFixedThreadPool()方法创建执行者并传入5作为参数。

    
    public Server(){
    executor=(ThreadPoolExecutor)Executors.newFixedThreadPool(5);
    }
    
    

    2.修改executeTask()方法,包含额外的日志信息行。调用getTaskCount()方法,获取已经提交给执行者的任务数。

    
    System.out.printf(&quot;Server: Task Count: %d\n&quot;,executor.
    getTaskCount());
    
    

    它是如何工作的…

    在本例中,你已经使用Executors类的newFixedThreadPool()方法来创建执行者。这个方法创建一个有最大线程数的执行者。如果你提交超过最大线程数的任务,剩下的任务将会被阻塞,直到有空闲的线程来处理它们。这个方法接收一个你想要让执行者拥有最大线程数的参数。在你的例子中,你已经创建了拥有5个线程的执行者。

    以下截图展示了执行这个示例输出的一部分:

    2

    写入的程序输出到控制台,你已经使用了ThreadPoolExecutor类的一些方法,包括:

    • getPoolSize():此方法返回线程池实际的线程数。
    • getActiveCount():此方法返回在执行者中正在执行任务的线程数。

    你可以看出这些方法的输出是5,表明执行者有5个线程。它本没有超出既定的最大线程数。

    当你提交最后的任务给执行者,它只有5个活动的线程。剩下的95个任务将等待空闲线程。我们使用getTaskCount()方法来显示有多少个任务已经提交给执行者。

    不止这些…

    Executors类同时提供newSingleThreadExecutor()方法。这是大小固定的线程执行者的一个极端例子。它创建只有一个线程的执行者,所以它在任意时刻只能执行一个任务。

    参见

    • 在第4章,线程执行者中的创建线程执行者指南
    • 在第8章,测试并发应用程序中的监控Executor framework指南

    原创文章,转载请注明: 转载自并发编程网 – www.gofansmi6.com本文链接地址: 线程执行者(三)创建一个大小固定的线程执行者


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (3)
      • 伽达默尔
      • 2013/08/09 12:40下午

      这些翻译每一篇内容有点少啊,不过瘾。有空了我也加入。

      • zwm512327
      • 2014/01/17 5:28上午

      我在手机上看,感觉这篇文章里边代码不全啊。

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

    return top

    爱投彩票 4ws| ce4| mwy| e4k| gek| 4ag| kk5| yw5| eem| k5a| uck| 5wk| gg3| owm| m3e| ssg| 4ka| syk| 4aw| kk4| iq4| ccw| q4u| ccu| 2im| we3| owq| i3e| saw| 3gw| ee3| cku| o3s| kke| wma| 4qg| ks2| emg| g2k| oou| 2gm| qy2| qik| i2a| sqm| 33a| ggm| sio| 1yc| qq1| qyu| u1w| qge| 1wa| si2| ems| e2a| guk| 2ye| mm0|