-
Java 分解任务执行 CountDownLatch 用法和 Future 用法比较
2016-09-05 09:36从执行效率方面看的话两种方式应该差距不大,因为 invokeAll 也是遍历 Future List 的:
public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException { if (tasks == null) throw new NullPointerException(); ArrayList<Future<T>> futures = new ArrayList<Future<T>>(tasks.size()); boolean done = false; try { for (Callable<T> t : tasks) { RunnableFuture<T> f = newTaskFor(t); futures.add(f); execute(f); } for (int i = 0, size = futures.size(); i < size; i++) { Future<T> f = futures.get(i); if (!f.isDone()) { try { f.get(); } catch (CancellationException ignore) { } catch (ExecutionException ignore) { } } } done = true; return futures; } finally { if (!done) for (int i = 0, size = futures.size(); i < size; i++) futures.get(i).cancel(true); } }
就像你说的最终都是基于 AQS(AbstractQueuedSynchronizer),不基于具体场景的话我更偏向于使用 invokeAll。
-
转载一个开源开撕的八卦
2016-09-02 14:48开源不见得就不能吃饱吃好啊。我很崇拜一个开发者 Marijin,CodeMirror 就是他的力作。看他博客,也是一个自由开发者,有一半左右工作精力在维护开源项目,收入很不错的 https://marijnhaverbeke.nl/fund 。
这点可能是大环境决定的,毕竟国内国外对于开源、开发者的理解是不一样的,但我相信一个足够好用的软件产品应该是开源的,特别对于个人开发者而言这点更重要,因为没有更多人的帮助和支持是很难走远的。
总之,我认为开源只是一种方式,甚至可能是一种很好的商业模式实现。开源和 make money 并不冲突,如果要将两者绑定理解那就....(别哭了,这次真没救了)