package ThreadPool;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 线程池
*/
public class ThreadPool
{
public static void main(String[] args)
{
ThreadPoolExecutor pool = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(3), new RejectedThreadPoolHandler());
for (int i = 1; i <= 10; i++)
{
MaskTest task = new MaskTest(i, "任务" + i);
pool.execute(task);
System.out.println("活跃的线程数:" + pool.getActiveCount() + ",核心线程数:" + pool.getCorePoolSize() + ",线程池大小:" + pool.getPoolSize() + ",队列的大小" + pool.getQueue().size());
}
pool.shutdown();
}
}
package ThreadPool;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 自定义拒绝策略,实现 RejectedExecutionHandler 接口。。。。具体实现待发掘
*/
public class RejectedThreadPoolHandler implements RejectedExecutionHandler
{
public RejectedThreadPoolHandler()
{
}
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor)
{
System.out.println("WARNING 自定义拒绝策略: Task " + r.toString() + " rejected from " + executor.toString());
}
}
package ThreadPool;
/**
* 线程任务类
*/
public class MaskTest implements Runnable
{
private int taskId;
private String 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;
}
public MaskTest(int taskId, String taskName)
{
this.taskId = taskId;
this.taskName = taskName;
}
@Override
public void run()
{
System.out.println("当前正在执行: 线程Id:" + taskId + ",任务名称:" + taskName);
try
{
Thread.currentThread().sleep(5 * 1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("线程Id:" + taskId + ",任务名称:" + taskName + " ----------- 执行完毕!");
}
}