new ThreadPoolExecutor.AbortPolicy()
时间: 2023-11-02 16:38:29 浏览: 35
`new ThreadPoolExecutor.AbortPolicy()` 是一个线程池的拒绝策略,它表示当线程池无法处理新的任务时,会抛出一个未检查的 `RejectedExecutionException` 异常。这个策略会直接拒绝任务并抛出异常,因此不会重试执行被拒绝的任务。这个策略是线程池的默认拒绝策略。
相关问题
ExecutorService threadPoolExecutor = new ThreadPoolExecutor( 3, 2, 5, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy() ); threadPoolExecutor.submit(()-> System.out.println("dsa"));报错了
这段代码创建了一个线程池ThreadPoolExecutor,包括3个核心线程,2个最大线程,等待队列长度为5,线程空闲时间为5秒,使用默认线程工厂和AbortPolicy饱和策略。然后通过submit方法向线程池中提交一个任务,该任务会输出"dsa"。
你遇到的错误可能是因为线程池已经被关闭或正在关闭,不能再提交新的任务。你可以在使用线程池前判断线程池是否已经关闭,例如:
```
if (!threadPoolExecutor.isShutdown()) {
threadPoolExecutor.submit(() -> System.out.println("dsa"));
}
```
如果线程池已经关闭,可以创建一个新的线程池来提交任务。
public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(7777); while (true) { Socket accept = serverSocket.accept(); log.debug(accept+""); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3,5,2, TimeUnit.SECONDS,new ArrayBlockingQueue<>(2), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); threadPoolExecutor.execute(new Runnable() { @Override public void run() { InputStream inputStream = null; try { inputStream = accept.getInputStream(); } catch (IOException e) { e.printStackTrace(); } InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while (true) { String s = null; try { s = bufferedReader.readLine(); } catch (IOException e) { e.printStackTrace(); } System.out.println("收到来自"+accept.getRemoteSocketAddress()+"的消息"+s); } } }); } }
这段代码是一个Java程序,它创建了一个ServerSocket对象,并在端口7777上监听客户端的连接请求。当有客户端连接时,程序会创建一个新的线程来处理该客户端的请求。具体来说,程序会创建一个ThreadPoolExecutor对象,该对象维护一个线程池,用于执行客户端请求处理的任务。线程池的核心线程数为3,最大线程数为5,空闲线程存活时间为2秒。如果线程池中的线程数已经达到最大值,而此时有新的任务加入,那么新任务会被放入一个大小为2的队列中等待处理。如果队列已满,那么新任务会被丢弃。在任务执行时,程序会从Socket对象中获取客户端发送的数据,并将其打印到控制台上。