今天同事询问如何将执行的日志打印出来,请求的参数打印出来
实现的方法很多,讲其中一种
1、自定义一个Runable的实现类,把你认为需要打印参数放置到对象的变量中
public class TestRunnable implements Runnable {
String param = null;
int aaa = 0;
@Override
public void run() {
}
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
public int getAaa() {
return aaa;
}
public void setAaa(int aaa) {
this.aaa = aaa;
}
}
2、验证拒绝策略的效果
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executorService = new ThreadPoolExecutor(10, 20,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(10), new RejectedExecutionHandler() {
//变更点,注意,此处把线程池中的阻塞队列拿出来,重新put Runnable
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
if (r instanceof TestRunnable) {
System.out.println("获取线程参数 TestRunnable :" + ((TestRunnable) r).getAaa());
} else {
System.out.println("线程丢弃");
}
}
});
int totalPage = 100;
//直接把100页提交到线程池
for (int i = 0; i < totalPage; i++) {
final int a = i;
TestRunnable testRunnable = new TestRunnable() {
@Override
public void run() {
try {
System.out.println("正常执行的参数:" + a);
//任务需要处理1秒钟
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return;
}
};
testRunnable.setAaa(a);
executorService.execute(testRunnable);
}
}
3、运行结果
正常执行的参数:0
正常执行的参数:6
正常执行的参数:2
正常执行的参数:3
正常执行的参数:4
正常执行的参数:1
正常执行的参数:8
正常执行的参数:7
正常执行的参数:5
正常执行的参数:9
正常执行的参数:20
正常执行的参数:21
正常执行的参数:22
正常执行的参数:23
正常执行的参数:24
正常执行的参数:25
获取线程参数 TestRunnable :30
正常执行的参数:26
正常执行的参数:27
正常执行的参数:28
获取线程参数 TestRunnable :31
正常执行的参数:29
获取线程参数 TestRunnable :32
获取线程参数 TestRunnable :33
获取线程参数 TestRunnable :34
获取线程参数 TestRunnable :35
获取线程参数 TestRunnable :36
获取线程参数 TestRunnable :37
获取线程参数 TestRunnable :38
获取线程参数 TestRunnable :39
获取线程参数 TestRunnable :40
获取线程参数 TestRunnable :41
获取线程参数 TestRunnable :42
获取线程参数 TestRunnable :43
获取线程参数 TestRunnable :44
获取线程参数 TestRunnable :45
获取线程参数 TestRunnable :46
获取线程参数 TestRunnable :47
获取线程参数 TestRunnable :48