封面图
目录
- 前言
- 第1章Semaphore和Exchanger的使用1
- 1.1Semaphore的使用2
- 1.1.1类Semaphore的同步性2
- 1.1.2类Semaphore构造方法permits参数作用4
- 1.1.3方法acquire(int permits)参数作用及动态添加permits许可数量5
- 1.1.4方法acquireUninterruptibly()的使用8
- 1.1.5方法availablePermits()和drainPermits()10
- 1.1.6方法getQueueLength()和hasQueuedThreads()12
- 1.1.7公平与非公平信号量的测试13
- 1.1.8方法tryAcquire()的使用15
- 1.1.9方法tryAcquire(int permits)的使用17
- 1.1.10方法tryAcquire(long timeout, TimeUnit unit)的使用17
- 1.1.11方法tryAcquire(int permits, long timeout, TimeUnit unit)的使用19
- 1.1.12多进路-多处理-多出路实验20
- 1.1.13多进路-单处理-多出路实验21
- 1.1.14使用Semaphore创建字符串池23
- 1.1.15使用Semaphore实现多生产者/多消费者模式25
- 1.2Exchanger的使用31
- 1.2.1方法exchange()阻塞的特性31
- 1.2.2方法exchange()传递数据32
- 1.2.3方法exchange(V x, long timeout, TimeUnit unit)与超时34
- 1.3本章总结35
- 第2章CountDownLatch和CyclicBarrier的使用36
- 2.1CountDownLatch的使用36
- 2.1.1初步使用37
- 2.1.2裁判在等全部的运动员到来38
- 2.1.3各就各位准备比赛39
- 2.1.4完整的比赛流程41
- 2.1.5方法await(long timeout, TimeUnit unit)44
- 2.1.6方法getCount()的使用46
- 2.2CyclicBarrier的使用46
- 2.2.1初步使用48
- 2.2.2验证屏障重置性及getNumberWaiting()方法的使用51
- 2.2.3用CyclicBarrier类实现阶段跑步比赛52
- 2.2.4方法isBroken()的使用55
- 2.2.5方法await(long timeout, TimeUnit unit)超时出现异常的测试57
- 2.2.6方法getNumberWaiting()和getParties()60
- 2.2.7方法reset()62
- 2.3本章总结64
- 第3章Phaser的使用65
- 3.1Phaser的使用66
- 3.2类Phaser的arriveAndAwaitAdvance()方法测试166
- 3.3类Phaser的arriveAndAwaitAdvance()方法测试268
- 3.4类Phaser的arriveAndDeregister()方法测试69
- 3.5类Phaser的getPhase()和onAdvance()方法测试70
- 3.6类Phaser的getRegisteredParties()方法和register()测试74
- 3.7类Phaser的bulkRegister()方法测试75
- 3.8类Phaser的getArrivedParties()和getUnarrivedParties()方法测试75
- 3.9类Phaser的arrive()方法测试177
- 3.10类Phaser的arrive ()方法测试278
- 3.11类Phaser的awaitAdvance(int phase)方法测试81
- 3.12类Phaser的awaitAdvanceInterruptibly(int)方法测试183
- 3.13类Phaser的awaitAdvanceInterruptibly(int)方法测试284
- 3.14类Phaser的awaitAdvanceInterruptibly(int)方法测试386
- 3.15类Phaser的awaitAdvanceInterruptibly(int,long,TimeUnit)方法测试487
- 3.16类Phaser的forceTermination()和isTerminated()方法测试89
- 3.17控制Phaser类的运行时机92
- 3.18本章总结93
- 第4章Executor与ThreadPoolExecutor的使用94
- 4.1Executor接口介绍94
- 4.2使用Executors工厂类创建线程池97
- 4.2.1使用newCachedThreadPool()方法创建无界线程池98
- 4.2.2验证newCachedThreadPool()创建为Thread池100
- 4.2.3使用newCachedThreadPool (ThreadFactory)定制线程工厂102
- 4.2.4使用newFixedThreadPool(int)方法创建有界线程池103
- 4.2.5使用newFixedThreadPool(int, ThreadFactory)定制线程工厂105
- 4.2.6使用newSingleThreadExecutor()方法创建单一线程池106
- 4.2.7使用newSingleThreadExecutor(ThreadFactory)定制线程工厂107
- 4.3ThreadPoolExecutor的使用107
- 4.3.1构造方法的测试107
- 4.3.2方法shutdown()和shutdownNow()与返回值119
- 4.3.3方法isShutdown()129
- 4.3.4方法isTerminating ()和isTerminated ()129
- 4.3.5方法awaitTermination(long timeout,TimeUnit unit)131
- 4.3.6工厂ThreadFactory+execute()+UncaughtExceptionHandler处理异常134
- 4.3.7方法set/getRejectedExecutionHandler()138
- 4.3.8方法allowsCoreThreadTimeOut()/(boolean)140
- 4.3.9方法prestartCoreThread()和prestartAllCoreThreads()142
- 4.3.10方法getCompletedTaskCount()144
- 4.3.11常见3种队列结合max值的因果效果145
- 4.3.12线程池ThreadPoolExecutor的拒绝策略151
- 4.3.13方法afterExecute()和beforeExecute()157
- 4.3.14方法remove(Runnable)的使用159
- 4.3.15多个get方法的测试162
- 4.3.16线程池ThreadPoolExecutor与Runnable执行为乱序特性166
- 4.4本章总结167
- 第5章Future和Callable的使用168
- 5.1Future和Callable的介绍168
-
5.2方法get()结合ExecutorService中的submit(Callable
)的使用168 -
5.3方法get()结合ExecutorService中的submit(Runnable)和isDone()的使用170 -
5.4使用ExecutorService接口中的方法submit(Runnable, T result)170 -
5.5方法cancel(boolean mayInterruptIfRunning)和isCancelled()的使用173 -
5.6方法get(long timeout, TimeUnit unit)的使用178 -
5.7异常的处理179 -
5.8自定义拒绝策略RejectedExecutionHandler接口的使用181 -
5.9方法execute()与submit()的区别182 -
5.10验证Future的缺点186 -
5.11本章总结188 -
第6章CompletionService的使用189 -
6.1CompletionService介绍189 -
6.2使用CompletionService解决Future的缺点190 -
6.3使用take()方法193 -
6.4使用poll()方法194 -
6.5使用poll(long timeout, TimeUnit unit)方法195 -
6.6类CompletionService与异常199 -
6.7方法Future submit(Runnable task, V result)的测试205 -
6.8本章总结207 -
第7章接口ExecutorService的方法使用208 -
7.1在ThreadPoolExecutor中使用ExecutorService中的方法208 -
7.2方法invokeAny(Collection tasks)的使用与interrupt209 -
7.3方法invokeAny()与执行慢的任务异常212 -
7.4方法invokeAny()与执行快的任务异常216 -
7.5方法invokeAny()与全部异常220 -
7.6方法invokeAny(CollectionTasks, timeout, timeUnit)超时的测试222 -
7.7方法invokeAll(Collection tasks)全正确226 -
7.8方法invokeAll(Collection tasks)快的正确慢的异常227 -
7.9方法invokeAll(Collection tasks)快的异常慢的正确230 -
7.10方法invokeAll(Collection tasks,long timeout,TimeUnit unit)先慢后快232 -
7.11方法invokeAll(Collection tasks,long timeout,TimeUnit unit)先快后慢234 -
7.12方法invokeAll(Collection tasks,long timeout,TimeUnit unit)全慢236 -
7.13本章总结238 -
第8章计划任务ScheduledExecutorService的使用239 -
8.1ScheduledExecutorService的使用240 -
8.2ScheduledThreadPoolExecutor使用Callable延迟运行241 -
8.3ScheduledThreadPoolExecutor使用Runnable延迟运行244 -
8.4延迟运行并取得返回值245 -
8.5使用scheduleAtFixedRate()方法实现周期性执行246 -
8.6使用scheduleWithFixedDelay()方法实现周期性执行248 -
8.7使用getQueue()与remove()方法250 -
8.8方法setExecuteExistingDelayedTasksAfterShutdownPolicy()的使用253 -
8.9方法setContinueExistingPeriodicTasksAfterShutdownPolicy()255 -
8.10使用cancel(boolean)与setRemoveOnCancelPolicy()方法257 -
8.11本章总结261 -
第9章Fork-Join分治编程262 -
9.1Fork-Join分治编程与类结构262 -
9.2使用RecursiveAction让任务跑起来264 -
9.3使用RecursiveAction分解任务265 -
9.4使用RecursiveTask取得返回值与join()和get()方法的区别266 -
9.5使用RecursiveTask执行多个任务并打印返回值270 -
9.6使用RecursiveTask实现字符串累加272 -
9.7使用Fork-Join实现求和:实验1273 -
9.8使用Fork-Join实现求和:实验2275 -
9.9类ForkJoinPool核心方法的实验276 -
9.9.1方法public void execute(ForkJoinTask< > task)的使用276 -
9.9.2方法public void execute(Runnable task)的使用278 -
9.9.3方法public void execute(ForkJoinTask< > task)如何处理返回值278 -
9.9.4方法public ForkJoinTask submit(ForkJoinTask task)的使用279 -
9.9.5方法public ForkJoinTask< > submit(Runnable task)的使用280 -
9.9.6方法public ForkJoinTask submit(Callable task)的使用281 -
9.9.7方法public ForkJoinTask submit(Runnable task, T result)的使用282 -
9.9.8方法public List > invokeAll(Collection< extends Callable > tasks)的使用285 -
9.9.9方法public void shutdown()的使用286 -
9.9.10方法public List shutdownNow()的使用289 -
9.9.11方法isTerminating()和isTerminated()的使用292 -
9.9.12方法public boolean isShutdown()的使用295 -
9.9.13方法public boolean awaitTermination(long timeout, TimeUnit unit)的使用297 -
9.9.14方法public T invoke(ForkJoinTask task)的使用299 -
9.9.15监视pool池的状态301 -
9.10类ForkJoinTask对异常的处理308 -
9.11本章总结309 -
第10章并发集合框架310 -
10.1集合框架结构简要310 -
10.1.1接口Iterable310 -
10.1.2接口Collection311 -
10.1.3接口List311 -
10.1.4接口Set312 -
10.1.5接口Queue312 -
10.1.6接口Deque312 -
10.2非阻塞队列313 -
10.2.1类ConcurrentHashMap的使用313 -
10.2.2类ConcurrentSkipListMap的使用322 -
10.2.3类ConcurrentSkipListSet的使用325 -
10.2.4类ConcurrentLinkedQueue的使用328 -
10.2.5类ConcurrentLinkedDeque的使用330 -
10.2.6类CopyOnWriteArrayList的使用332 -
10.2.7类CopyOnWriteArraySet的使用335 -
10.3阻塞队列337 -
10.3.1类ArrayBlockingQueue的使用337 -
10.3.2类PriorityBlockingQueue的使用338 -
10.3.3类LinkedBlockingQueue的使用340 -
10.3.4类LinkedBlockingDeque的使用341 -
10.3.5类SynchronousQueue的使用341 -
10.3.6类DelayQueue的使用344 -
10.3.7类LinkedTransferQueue的使用345 -
10.4本章总结354