目录 1
第1章 定义线程 1
1.1 线程的定义 1
1.1.1 多任务 2
1.1.2 进程 3
1.1.3 线程 4
1.2 .NET和C#对线程的支持 13
1.2.1 System.AppDomain类 13
1.2.2 线程管理与.NET运行库 19
1.3 本章小结 20
2.1 System.Threading命名空间 21
第2章 .NET中的线程 21
2.1.1 Thread类 22
2.1.2 创建线程 24
2.1.3 ThreadStart委托和执行分支 27
2.1.4 线程的属性和方法 30
2.1.5 线程的优先级 32
2.1.6 计时器和回调 35
2.1.7 使用线程调节线程 37
2.2 线程的生存期 44
2.2.1 使线程睡眠 45
2.2.2 中断线程 48
2.2.3 暂停及恢复线程 50
2.2.4 销毁线程 57
2.2.5 连接线程 58
2.3 为什么线程不是万能的 59
2.4 使用线程的时机 60
2.4.1 后台进程 60
24.2 访问外部资源 63
2.5 线程的陷阱 65
2.5.1 再次访问的执行顺序 65
2.5.2 循环中的线程 68
2.6 本章小结 72
第3章 使用线程 73
3.1 为何要同步 73
3.1.1 同步重要的代码段 74
3.1.2 使账户对象不可改变 76
3.1.3 使用线程安全包装器 76
3.2 .NET对同步的支持 77
3.3 .NET同步策略 80
3.3.1 同步上下文 80
3.3.2 同步代码区 82
3.3.3 手控同步 98
3.3.4 同步和性能 109
3.4 小心死锁 109
3.5 端到端的示例 113
3.5.1 编写自己的线程安全包装器 113
3.5.2 数据库连接池 122
3.6 本章小结 131
第4章 线程设计规则 132
4.1 应用程序中的多线程 132
4.2 STA线程模式 133
4.3 MTA线程模式 135
4.3.1 指定线程模式 135
4.3.2 设计线程应用程序 136
4.3.3 线程和关系 137
4.4 本章小结 147
5.1 什么是线程池管理 148
第5章 线程应用程序的伸缩 148
5.1.1 需要线程池的原因 149
5.1.2 线程池的概念 149
5.2 CLR和线程 150
5.2.1 CLR在线程池管理中的作用 150
5.2.2 线程池管理中的问题 151
5.2.3 线程池的大小 151
5.3 ThreadPool类 152
5.4 C#中的线程池编程 156
5.5 .NET中的可伸缩性 167
5.6 本章小结 183
第6章 调试与跟踪线程 184
6.2 调试代码 185
6.1 创建应用程序代码 185
6.2.1 Visual Studio.NET调试器 186
6.2.2 单步执行代码 189
6.2.3 设置断点 190
6.2.4 调试线程 191
6.3 代码的跟踪 192
6.3.1 Trace类 192
6.3.2 使用不同的侦听器应用程序 196
6.3.3 跟踪选项 201
6.3.4 Debug类 207
6.4 DataImport示例 207
6.4.1 代码 208
6.4.2 测试应用程序 213
6.4.3 逻辑错误 214
6.5 本章小结 216
第7章 联网与线程 217
7.1 .NET中的联网 217
7.1.1 System.Net命名空间 218
7.1.2 System.Net.Sockets命名空间 219
7.2 创建示例应用程序 220
7.2.1 设计目标 220
7.2.2 构建应用程序 221
7.2.3 运行应用程序 241
7.3 本章小结 244
附录A 支持、勘误表与代码下载 245