/**
* ThreadPoolExecutor相关参数以及四种拒绝策略(根据业务要求可自定义重写策略)
* 参考:https://www.cnblogs.com/dafanjoy/p/9729358.html
*/
package com.wk.cn.thread;
import java.util.concurrent.*;
public class ExecutorsSamples {
/**
* 合理分配线程池相关大小以及数组队列
*/
public static ExecutorService executors = new ThreadPoolExecutor(
10,15,3000L,TimeUnit.MILLISECONDS,new LinkedBlockingDeque<>(1024),new ThreadPoolExecutor.AbortPolicy());
/**
*
* @LinkedBlockingDeque 和 ArrayBlockingQueue 只要设置大小了,LinkedBlockingDeque就不是无阻塞队列
* 也可以将AbortPolicy换成其他策略试一下,结果都是符合预期的
*/
/*public static ExecutorService executors = new ThreadPoolExecutor(2,6,1L,TimeUnit.MILLISECONDS,
new LinkedBlockingDeque<Runnable>(2),new ThreadPoolExecutor.AbortPolicy());*/
public static void main(String[] args) {
for (int i = 1; i <= 15; i++) {
try {
executors.execute(new Task(String.valueOf(i)));
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}
}
//执行任务类
class Task extends Thread{
private String strings ;
public Task(String strings){
this.strings= strings;
}
@Override
public void run(){
//将线程名称和传入的循环数据编号字符串打印出来
System.out.println(Thread.currentThread().getName()+":"+strings);
}
public String getStrings() {
return strings;
}
public void setStrings(String strings) {
this.strings = strings;
}
}