多线程进阶
jrymos001
加油
展开
-
多线程进阶001 之 在线程中执行任务
当围绕”任务执行” 来设计应用程序结构时,第一步就是要找出清晰的任务边界.在理想情况下,各个任务之间是相互独立的. 大多数服务器应用程序都提供了一种自然的任务边界选择方式: 以独立的客户请求为边界.串行的执行任务在应用程序中可以通过多种策略来调度任务,而其中一些策略能够更好地利用潜在的并发性.最简单的策略就是在单个线程中串行的执行各项任务.import java.io.IOException;i原创 2017-05-29 19:32:36 · 373 阅读 · 0 评论 -
多线程进阶002 之 Executor框架
Executor接口public interface Executor { void execute(Runnable command);}基于Executor的web服务器使用Executor来构建web服务器,这里的Executor最多只能容纳100个线程public class TaskExecutionWebServer { private static final int原创 2017-05-29 21:38:12 · 289 阅读 · 0 评论 -
多线程进阶003 之 可利用的并行性案例
学习书籍推荐《Java Concurrency In Practice》在大多数服务器应用程序中都存在一个明显的任务边界: 单个客户请求. 但是有时候,任务边界并非是显而易见的,例如在很多桌面应用程序中,即使是服务器应用程序,在单个客户请求中,仍然可能存在可发掘的并行性,例如数据库服务器.非常糟糕的Timer行为一个异常将导致后面所有的任务,包括与该任务无关的任务都无法执行import java.原创 2017-05-31 10:52:34 · 387 阅读 · 0 评论 -
多线程进阶005 之 任务取消(二)
本节主要讲中断:1. 中断策略2. 响应中断3. 示例: 计时运行4. Future5. 处理不可中断的阻塞中断策略由于每个线程拥有各自的中断策略,因此除非你知道中断对该线程的含义,否则就不应该中断这个线程. 线程应该只能由其所有者中断,所有者可以将线程的中断策略信息封装到某个合适的取消的机制中,例如shutdown方法.响应中断两种策略: - 传递异常: 将异常传递给上一层的调用原创 2017-06-03 09:44:25 · 431 阅读 · 0 评论 -
多线程进阶004 之 任务取消(一)
如果外部代码能在某个操作正常完成之前将其置入”完成”状态,那么这个操作就可以称为可取消的,取消某个操作的原因有很多: 用户请求取消: 用户点击图形界面程序中的”取消”按钮,或者通过管理接口来发出取消请求. 有时间限制操作:例如,某个应用程序需要在有限时间内搜索问题空间,并在这个时间内选择最佳的解决方案.当计时器超时时,需要取消所有正在搜索的任务. 应用程序事件: 例如,应用程序对某个问题空间进原创 2017-06-02 11:18:12 · 352 阅读 · 0 评论 -
多线程进阶006 之 停止基于线程服务
如果应用程序准备退出,那么这些服务所拥有的线程也需要结束,本节将讲述以下技巧: 关闭日志服务 – 不支持关闭的日志服务 – 通过一种不可靠的方式增加关闭操作 – 可靠的取消操作关闭ExecutorService毒丸对象只执行一次的服务shutdownNow的局限性 – 在ExecutorService跟踪在关闭之后取消的任务 – 使用TrackingExecutorService原创 2017-06-11 18:41:30 · 283 阅读 · 0 评论 -
多线程进阶007 之 处理非正常的线程终止和JVM关闭
处理非正常的线程终止导致线程提前死亡的最主要原因就是RuntimeException,由于这些异常表示出现了某种编程错误或者其他不可修复的错误,因此它们通常不会被捕获.它们不会在调用栈逐层传递,而是默认地在控制台中输出栈追踪信息,并终止线程.在并发程序中,是无法做到一直观察控制台的, 例如:你的web应用部署到服务器上,难道你要派个人一直去观察控制台?线程非正常退出的后果可能是良性的,也可能是恶性的原创 2017-06-12 13:52:18 · 1013 阅读 · 0 评论