JDK线程池的ThreadFactory

JDK线程池:Executors.newFixedThreadPool , Executors.newSingleThreadExecutor,由一个ThreadFactory来创建新的线程,默认情况下为Executors.defaultThreadFactory(),ThreadFactory接口:

 
  1. public interface ThreadFactory {  
  2.     Thread newThread(Runnable r);  

我们可以采用自定义的ThreadFactory工厂,增加对线程创建与销毁等更多的控制,

一个简单的例子,跟踪线程的创建与销毁:

 
  1. package org.guojje.threadpool;  
  2.  
  3. import java.util.concurrent.atomic.AtomicInteger;  
  4.  
  5. public class WorkThread extends Thread {  
  6.  
  7.     private Runnable target;  
  8.     private AtomicInteger counter;  
  9.  
  10.     public WorkThread(Runnable target, AtomicInteger counter) {  
  11.         this.target = target;  
  12.         this.counter = counter;  
  13.     }  
  14.  
  15.     @Override 
  16.     public void run() {  
  17.         try {  
  18.             target.run();  
  19.         } finally {  
  20.             int c = counter.getAndDecrement();  
  21.             System.out.println("terminate no " + c + " Threads");  
  22.         }  
  23.     }  
 
  1. package org.guojje.threadpool;  
  2.  
  3. import java.util.concurrent.ExecutorService;  
  4. import java.util.concurrent.Executors;  
  5. import java.util.concurrent.ThreadFactory;  
  6. import java.util.concurrent.TimeUnit;  
  7. import java.util.concurrent.atomic.AtomicInteger;  
  8.  
  9. public class MyThread implements Runnable {  
  10.       
  11.       
  12.     public static void main(String[] args) {  
  13.        ExecutorService ctp =  Executors.newCachedThreadPool(new ThreadFactory() {  
  14.             private AtomicInteger count = new AtomicInteger();  
  15.             public Thread newThread(Runnable r) {  
  16.                 int c = count.incrementAndGet();  
  17.                 System.out.println("create no " + c + " Threads");  
  18.                 return new WorkThread(r,count);  
  19.                   
  20.             }  
  21.         });  
  22.          
  23.        ctp.execute(new MyThread());  
  24.        ctp.execute(new MyThread());  
  25.        ctp.execute(new MyThread());  
  26.        ctp.execute(new MyThread());  
  27.        ctp.execute(new MyThread());  
  28.        ctp.execute(new MyThread());  
  29.          
  30.        ctp.shutdown();  
  31.         try {  
  32.             ctp.awaitTermination(1200, TimeUnit.SECONDS);  
  33.         } catch (InterruptedException e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.     }  
  37.       
  38.     public void run(){  
  39.         System.out.println("complete a task!!!");  
  40.     }  
  41. }  

可以看到在执行这个过程中,共创建过几个线程。


本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/650981

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/427788

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。