JAVAスレッドプールのカスタム拒否ポリシー

2876 ワード

Javaスレッドプールでカスタム拒否ポリシーを実装するには、RejectedExecutionHandlerインタフェースを実装するだけです.
package com.bjsxt.height.concurrent018;
import java.net.HttpURLConnection;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
public class MyRejected implements RejectedExecutionHandler{
	public MyRejected(){
	}
	
	@Override
	public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
		System.out.println("     ..");
		System.out.println("        :" + r.toString());
		
	}
}


補助テストクラス
package com.bjsxt.height.concurrent018;

public class MyTask implements Runnable {

	private int taskId;
	private String taskName;
	
	public MyTask(int taskId, String taskName){
		this.taskId = taskId;
		this.taskName = taskName;
	}
	
	public int getTaskId() {
		return taskId;
	}

	public void setTaskId(int taskId) {
		this.taskId = taskId;
	}

	public String getTaskName() {
		return taskName;
	}

	public void setTaskName(String taskName) {
		this.taskName = taskName;
	}

	@Override
	public void run() {
		try {
			System.out.println("run taskId =" + this.taskId);
			Thread.sleep(5*1000);
			//System.out.println("end taskId =" + this.taskId);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}		
	}
	
	public String toString(){
		return Integer.toString(this.taskId);
	}

}


mainメソッドテストクラス
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy;
public class UseThreadPoolExecutor1 {
	public static void main(String[] args) {
		/**
		 *         ,          ,            corePoolSize,       ,
		 *    corePoolSize,         ,
		 *      ,         maximumPoolSize    ,      ,
		 *       maximumPoolSize,       。        。
		 * 
		 */	
		ThreadPoolExecutor pool = new ThreadPoolExecutor(
				1, 				//coreSize
				2, 				//MaxSize
				60, 			//60
				TimeUnit.SECONDS, 
				new ArrayBlockingQueue(3)			//       (    )
				//new LinkedBlockingQueue()
				, new MyRejected()
				//, new DiscardOldestPolicy()
				);
		MyTask mt1 = new MyTask(1, "  1");
		MyTask mt2 = new MyTask(2, "  2");
		MyTask mt3 = new MyTask(3, "  3");
		MyTask mt4 = new MyTask(4, "  4");
		MyTask mt5 = new MyTask(5, "  5");
		MyTask mt6 = new MyTask(6, "  6");
		pool.execute(mt1);
		pool.execute(mt2);
		pool.execute(mt3);
		pool.execute(mt4);
		pool.execute(mt5);
		pool.execute(mt6);
		pool.shutdown();
		
	}
}