JDK線程池的ThreadFactory

閱讀全文請點擊:http://click.aliyun.com/m/41733/
JDK線程池:Executors.newFixedThreadPool , Executors.newSingleThreadExecutor,由一個ThreadFactory來創建新的線程,默認情況下爲Executors.defaultThreadFactory(),ThreadFactory接口:

public interface ThreadFactory {
Thread newThread(Runnable r);
}
我們可以採用自定義的ThreadFactory工廠,增加對線程創建與銷燬等更多的控制,

一個簡單的例子,跟蹤線程的創建與銷燬:

package org.guojje.threadpool;

import java.util.concurrent.atomic.AtomicInteger;

public class WorkThread extends Thread {

private Runnable target;  
private AtomicInteger counter;  

public WorkThread(Runnable target, AtomicInteger counter) {  
    this.target = target;  
    this.counter = counter;  
}  

@Override 
public void run() {  
    try {  
        target.run();  
    } finally {  
        int c = counter.getAndDecrement();  
        System.out.println("terminate no " + c + " Threads");  
    }  
}  

}
package org.guojje.threadpool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class MyThread implements Runnable {

public static void main(String[] args) {  
   ExecutorService ctp =  Executors.newCachedThreadPool(new ThreadFactory() {  
        private AtomicInteger count = new AtomicInteger();  
        public Thread newThread(Runnable r) {  
            int c = count.incrementAndGet();  
            System.out.println("create no " + c + " Threads");  
            return new WorkThread(r,count);  

        }  
    });  

   ctp.execute(new MyThread());  
   ctp.execute(new MyThread());  
   ctp.execute(new MyThread());  
   ctp.execute(new MyThread());  
   ctp.execute(new MyThread());  
   ctp.execute(new MyThread());  

   ctp.shutdown();  
    try {  
        ctp.awaitTermination(1200, TimeUnit.SECONDS);  
    } catch (InterruptedException e) {  
        e.printStackTrace();  
    }  
}  

public void run(){  
    System.out.println("complete a task!!!");  
}  

}
可以看到在執行這個過程中,共創建過幾個線程。

閱讀全文請點擊:http://click.aliyun.com/m/41733/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章