7大属性
int corePoolSize,//最小线程数
int maximumPoolSize,//最大线程数
long keepAliveTime,//最大线程数
TimeUnit unit,//等待时间的单位
BlockingQueue<Runnable> workQueue,//等待的线程数
ThreadFactory threadFactory,//线程工厂
RejectedExecutionHandler handler//拒绝策略
7大属性和四中拒绝策略
ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
5,//最大线程数
3,
TimeUnit.SECONDS,//等待时间的单位
new LinkedBlockingQueue<>(3), //等待的线程数
Executors.defaultThreadFactory(),//线程工厂
new ThreadPoolExecutor.
() //第一种拒绝策略
);
4种拒绝策略
1.AbortPolicy
new ThreadPoolExecutor.AbortPolicy() //第一种拒绝策略
当线程超出了最大线程数和等待线程数的和后会出现异常
java.util.concurrent.RejectedExecutionException
package pool;
import java.util.concurrent.*;
//线程池的三大方法
//Executors 公具类
public class Demo01 {
public static void main(String[] args) {
// Executors.newSingleThreadExecutor();创建单个线程
// ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
// ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
// 7大属性和四中拒绝策略
ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
5,//最大线程数
3,//等待的时间
TimeUnit.SECONDS,//等待时间的单位
new LinkedBlockingQueue<>(3), //等待的线程数
Executors.defaultThreadFactory(),//线程工厂
new ThreadPoolExecutor.AbortPolicy() //第一种拒绝策略
);
try {
for (int i = 1; i <10 ; i++) {
threadExecutor.execute(()->{
System.out.println(Thread.currentThread().getName());
});
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 结束线程
threadExecutor.shutdown();
}
}
}
2.CallerRunsPolicy
CallerRunsPolicy当线程数超出时会返回超出的线程,交给主线程执行 。哪来的回哪去
package pool;
import java.util.concurrent.*;
//线程池的三大方法
//Executors 公具类
public class Demo01 {
public static void main(String[] args) {
// Executors.newSingleThreadExecutor();创建单个线程
// ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
// ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
// 7大属性和四中拒绝策略
ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
5,//最大线程数
3,//等待的时间
TimeUnit.SECONDS,//等待时间的单位
new LinkedBlockingQueue<>(3), //等待的线程数
Executors.defaultThreadFactory(),//线程工厂
new ThreadPoolExecutor.CallerRunsPolicy() //第二种拒绝策略 哪来的回拿去
);
try {
for (int i = 1; i <10 ; i++) {
threadExecutor.execute(()->{
System.out.println(Thread.currentThread().getName());
});
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 结束线程
threadExecutor.shutdown();
}
}
}
pool-1-thread-2
pool-1-thread-2
pool-1-thread-2
pool-1-thread-2
pool-1-thread-5
pool-1-thread-4
pool-1-thread-3
pool-1-thread-1
main
3.DiscardPolicy
DiscardPolicy不抛出异常,继续执行
package pool;
import java.util.concurrent.*;
//线程池的三大方法
//Executors 公具类
public class Demo01 {
public static void main(String[] args) {
// Executors.newSingleThreadExecutor();创建单个线程
// ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
// ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
// 7大属性和四中拒绝策略
ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
5,//最大线程数
3,//等待的时间
TimeUnit.SECONDS,//等待时间的单位
new LinkedBlockingQueue<>(3), //等待的线程数
Executors.defaultThreadFactory(),//线程工厂
new ThreadPoolExecutor.DiscardPolicy() //第三种拒绝策略 不抛出异常
);
try {
for (int i = 1; i <10 ; i++) {
threadExecutor.execute(()->{
System.out.println(Thread.currentThread().getName());
});
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 结束线程
threadExecutor.shutdown();
}
}
}
4.DiscardOldestPolicy 线程队列满后会去和最早的线程竞争
package pool;
import java.util.concurrent.*;
//线程池的三大方法
//Executors 公具类
public class Demo01 {
public static void main(String[] args) {
// Executors.newSingleThreadExecutor();创建单个线程
// ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
// ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
// 7大属性和四中拒绝策略
ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
5,//最大线程数
3,//等待的时间
TimeUnit.SECONDS,//等待时间的单位
new LinkedBlockingQueue<>(3), //等待的线程数
Executors.defaultThreadFactory(),//线程工厂
new ThreadPoolExecutor.DiscardOldestPolicy() //第四种拒绝策略 线程队列满后会去和最早的线程竞争
);
try {
for (int i = 1; i <10 ; i++) {
threadExecutor.execute(()->{
System.out.println(Thread.currentThread().getName());
});
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 结束线程
threadExecutor.shutdown();
}
}
}