Java
文章平均质量分 76
菜的很一般
这个作者很懒,什么都没留下…
展开
-
CompletionService的使用
Callable在多个异步任务里并不能把最先完成的任务返回结果,针对于这个缺点,CompletionService很好的解决这个问题。在CompletionService中提供了提交异步任务的方法(真正的异步任务执行还是由其内部的ExecutorService完成的),任务提交之后调用者不再关注Future,而是从BlockingQueue中获取已经执行完成的Future,在异步任务完成之后Future才会被插入阻塞队列,也就是说调用者从阻塞队列中获取的Future是已经完成了的异步执行任务,所以再次通过F原创 2021-08-30 15:10:03 · 119 阅读 · 0 评论 -
Semaphore的使用
Semaphore(信号量)从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。拿到信号量的线程可以进入代码,否则就等待。通过acquire()和release()获取和释放访问许可。 Semaphore semaphore = new Semaphore(5);原创 2021-08-17 14:57:55 · 105 阅读 · 0 评论 -
Future和Callable
目录Callable和Runnable的区别Future的使用Future的缺点ExecutorService方法execute()与submit()的区别Callable和Runnable的区别Callable接口的call()方法可以有返回值(通过Future接口进行获得的),而Runnable接口的run()方法没有返回值。Callable接口的call()方法可以声明抛出异常,而Runnable接口的run()方法不可以声明抛出异常。Future的使用作为多线程的异步执行结果,Fut原创 2021-02-24 15:09:29 · 262 阅读 · 0 评论 -
ThreadPoolExecutor 是如何工作的?那么多参数到底怎么用?
这里写自定义目录标题ThreadPoolExecutor的参数含义ThreadPoolExecutor是如何工作的ThreadPoolExecutor的参数含义如果你在工作中用到线程池了,那一定要用 ThreadPoolExecutor 这个类,这个类里面有常用5个参数(实际上是7个),但是呢,有几种情况,使用的时候往往分不清,之后觉得线程池很难,今天我就用例子来说明一下具体用法,今后不再犯难ThreadPoolExecutor。public ThreadPoolExecutor(int corePo原创 2021-02-20 15:54:03 · 620 阅读 · 2 评论 -
常见的BlockingQueue有哪些
常见的BlockingQueue有哪些?ArrayBlockingQueue基于数组结构,构造函数时需要指定最大容量,当队列里的元素超过最大容量时,要么阻塞,要么直接返回结果,写入数据时不能写入null。阻塞式写入向队尾写入数据,队列满后一直阻塞,除非有消费了,或者线程中断put(E e)向队尾写入数据,队列满后开始阻塞,阻塞指定时间后,结束阻塞,不会写入成功,返回结果falseoffer(E e, long timeout, TimeUnit unit)非阻塞式写入当队列满了后,直接原创 2021-01-18 17:01:25 · 262 阅读 · 0 评论 -
CyclicBarrier的简单使用
由来CountDownLatch虽然好用,但是也有不足,就是它的计数器不能循环使用,是属于一次性的消费品,对此CyclicBarrier倒是弥补了它这个不足,大部分情况下CyclicBarrier是对CountDownLatch的补充,但是两者还是有一点小小的区别例子假如公司团建,大家一起做大巴车,在大巴车出发之前,肯定是需要点名的,只有大家都到车上之后,才会发车,然后到了到了目的地之后,肯定是所有人都下车了,司机才能把车开走,这个过程中涉及了2次大家都就位之后,司机才能继续操作,可以证明Cyclic原创 2020-10-16 16:41:31 · 78 阅读 · 0 评论 -
CountDownLatch简单入门
由来在多线程的开发中,有时候会遇到线程间需要互相配合的业务操作,比如某一个线程需要其他几个线程执行完了之后再执行 (一个等多个)一些线程需要在某个时刻同时执行,就像等待裁判员枪响后,才能同时起跑(多个等一个)此时就不太好控制线程执行的顺序了,需要使用CountDownLatch这个类。CountDownLatch也是一个同步功能的辅助类,使用效果是给定一个计数,当使用这个CountDownLatch类的线程判断计数不为0时,则呈wait状态,如果为0时则继续运行。实现等待与继续运行的效果分别原创 2020-10-15 15:20:37 · 140 阅读 · 1 评论