并发编程&高并发
咕噜咕叽
么么哒
展开
-
Java并发编程(第三章):对象的共享
前一章讲到要编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理。以前,我们知道如何通过同步来避免多个线程同一时刻访问相同的数据,本章我们将介绍如何发布共享和发布对象,从而使得它们能够安全的由多个线程访问。。。这两章结合一起,进行成了构建安全类以及通过java current包来构建并发应用程序的基础。 我们已经知道同步代码块以及同步方法可以保证原子操作,一种常...原创 2018-02-11 17:25:37 · 293 阅读 · 0 评论 -
使用CompletionService来维护处理线程的返回结果
[java] view plain copypublic interface CompletionService<V> { Future<V> submit(Callable<V> task); Future<V> submit(Runnable task, V result); ...转载 2018-03-28 20:33:55 · 925 阅读 · 0 评论 -
CompletionService简介、原理以及小案例
博客1:http://www.oschina.net/question/12_11255博客2:CompletionService简介CompletionService与ExecutorService类似都可以用来执行线程池的任务,ExecutorService继承了Executor接口,而CompletionService则是一个接口,那么为什么CompletionService不直接继承Exe...转载 2018-03-28 20:16:44 · 23572 阅读 · 7 评论 -
深入剖析线程池(继承关系、源码原理解析、小例子等)
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果。今天我...转载 2018-03-28 19:58:10 · 1599 阅读 · 0 评论 -
基于线程池的简单封装
public final class ThreadPoolUtils { public static final int FixedThread = 0; public static final int CachedThread = 1; public static final int SingleThread = 2; @IntDef({FixedThread, Cac...转载 2018-03-28 19:50:28 · 184 阅读 · 0 评论 -
java并发包中的线程池(ThreadPoolExecutor参数及特点、Executors提供的四种线程池)
为什么用线程池创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率例如:记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3如果T1+T3>T2,那么是不是说开启一个线程来执行这个任务太不划算了!正好,线程池缓存线程,可用已有的闲置线程来执行新任务,避免了T1+T3带来的系统开销线程并发数量过多,抢占系统资源从而导致阻塞我们知道线程能共享系统资源,如...转载 2018-03-28 19:42:46 · 503 阅读 · 0 评论 -
ExecutorService和ThreadPoolExecutor
文章译自:http://tutorials.jenkov.com/java-util-concurrent/index.html 抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。 转自请注明出处。ExecutorServiceJava.util.concurrent.ExecutorService接口代表一种异步执行机制,它能够在后台执行任务。因此ExecutorService...转载 2018-03-28 19:39:53 · 7145 阅读 · 0 评论 -
Future和FutureTask的区别
注意:future.get().... 对于runnable对象而言,线程执行成功,返回null 对于callable对象而言,线程返回的就是call()方法的返回值[html] view plain copypackage com.z; import java.util.Date; import java.util.concurrent.*; publi...转载 2018-03-28 19:35:21 · 1421 阅读 · 0 评论 -
判断线程池中的线程是否全部执行完毕
在使用多线程的时候有时候我们会使用 java.util.concurrent.Executors的线程池,当多个线程异步执行的时候,我们往往不好判断是否线程池中所有的子线程都已经执行完毕,但有时候这种判断却很有用,例如我有个方法的功能是往一个文件异步地写入内容,我需要在所有的子线程写入完毕后在文件末尾写“---END---”及关闭文件流等,这个时候我就需要某个标志位可以告诉我是否线程池中所有的子线...转载 2018-04-02 10:16:30 · 973 阅读 · 0 评论 -
ExecutorService里的shutdown 和 isTerminated
void shutdown()启动一次顺序关闭,执行以前提交的任务,但不接受新任务。若已经关闭,则调用没有其他作用。抛出:SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问...转载 2018-03-28 20:38:50 · 16698 阅读 · 0 评论