目录
第一种:ThreadPoolExecutor.AbortPolicy(直接抛出异常)
第二种:ThreadPoolExecutor.DiscardPolicy(丢弃当前被拒绝的任务(而不抛出任何异常))
第三种:ThreadPoolExecutor.DiscardOldestPolicy(将工作队列中最老的任务丢弃,然后重新尝试接纳被拒绝的任务)
第四种:ThreadPoolExecutor.DiscardPolicy(丢弃当前被拒绝的任务(而不抛出任何异常))
1.拒绝策略是什么?
我们在创建线程池执行任务时,因为执行任务过多,开启的线程已经达到线程池的最大线程数,那么就要启动拒绝策略来对多余的任务进行处理。对多余任务的处理策略叫做拒绝策略
2.拒绝策略具体有哪些?
一共有四种(如下):
| ThreadPoolExecutor.AbortPolicy | 直接抛出异常 |
| ThreadPoolExecutor.DiscardPolicy | 丢弃当前被拒绝的任务(而不抛出任何异常) |
| ThreadPoolExecutor.DiscardOldestPolicy | 将工作队列中最老的任务丢弃,然后重新尝试接纳被拒绝的任务 |
| ThreadPoolExecutor.CallerRunsPolicy | 在客户端线程中执行被拒绝的任务 |
第一种:ThreadPoolExecutor.AbortPolicy(直接抛出异常)
测试代码如下:
package week5;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;
import java.util.concurrent.TimeUnit;
public class Test1 {
public static void main(String[] args) throws InterruptedException {
//第一个任务
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("1"+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
//第二个任务
Runnable r2 = new Runnable() {
@Override
public void run() {
System.out.println("2"+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
//第三个任务
Runnable r3 = new Runnable() {
@Override
public void run() {
System.out.println("3"+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
//第四个任务
Runnable r4 = new Runnable() {
@Override
public void run() {
System.out.println("4"+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
/*
* 创建线程池:
* 1:核心线程数是 1
* 2:最大线程数是 2
* 10:最大存活时间
* TimeUnit.SECONDS:最大存活时间的单位
* new ArrayBlockingQueue<Runnable>(1):阻塞队列,队列中只能存放一个任务
* Executors.defaultThreadFactory():线程工厂
* new AbortPolicy()):拒绝策略(第一种:直接抛出异常)
*/
ThreadPoolExecutor pool = ne

最低0.47元/天 解锁文章
1970

被折叠的 条评论
为什么被折叠?



