分类
数据结构:ConcurrentHashMap, BlockingQueue 系列
线程池:Executor, ExecutorService, ThreadPoolExecutor, ScheduledThreadPoolExecutor, Executors(工厂类), Callable, Runnable, Future
锁:ReentrantLock, ReentrantReadWriteLock, Condition
线程同步:CountDownLatch, CyclicBarrier
线程池饱和策略
ThreadPoolExecutor 的饱和策略通过调用 setRejectedExecutionHandler 来修改。不同的饱和策略如下。
- AbortPolicy: executor 抛出未检查 RejectedExecutionException,调用者捕获这个异常,然后自己编写能满足自己需求的处理代码。
- DiscardRunsPolicy: 遗弃最旧的,选择丢弃的任务,是本应接下来就执行的任务。
- DiscardPolicy: 遗弃会默认放弃最新提交的任务。
- CallerRunsPolicy: 调用者运行,既不会丢弃那个任务,也不会抛出任何异常,把任务推回到调用者那里,以此减缓新任务流。它不会在池线程中执行最新提交的任务,但它会在一个调用了execute() 的线程中执行。
Runnable 和 Callable 接口有什么不同
Callable 的 call() 方法可以返回值和抛出异常,而 Runnable的 run() 方法没有这些功能。Callable 可以返回装载有计算结果的 Future 对象
Java线程池中 submit() 和 execute() 方法有什么区别
两个方法都可以向线程池提交任务,execute() 方法的返回类型是 void,它定义在 Executor 接口中,而 submit() 方法可以返回持有计算结果的 Future 对象,它定义在 ExecutorService 接口中。
网友评论