Java多线程编程实战指南:设计模式篇(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7 多线程编程常用术语

多线程编程常用术语如表1-1所示。

表1-1 多线程编程常用术语

续表

清单1-4 工作者线程的示例代码

清单1-5 非线程安全的计数器类

清单1-6 线程安全的计数器类

[1]“正常停止”指Java虚拟机既不是通过System.exit调用来停止的,也不是通过强制停止进程的方式来停止的(如在Linux系统下使用kill命令停止Java进程)。

[2]这是从Java虚拟机规范(Java Virtual Machine Specification)的角度来说的,在实现具体的Java虚拟机的时候,可能会用一个调用栈来实现这两种调用栈的功能。(参见链接[1])

[3]即运行Java虚拟机的主机。

[4]线程调度器是操作系统的一部分。

[5]如文件读/写和阻塞式Socket读/写。

[6]线程所执行的代码从CPU缓存中访问其所需的变量值比从主内存(RAM)中访问相应的变量值要快得多,但是上下文切换会导致相关线程所访问的CPU缓存内容失效,这使得相关线程稍后会被重新调度到运行时,其不得不再次访问主内存中的变量以重新创建CPU缓存内容。

[7]相应的可执行文件为:Windows安装目录\System32\perfmon.exe。

[8]以Linux版JDK为例,相应的jvisualvm工具的可执行文件为:JDK主目录/bin/jstack。

[9]以Linux版JDK为例,相应的jstack工具的可执行文件为:JDK主目录/bin/jstack。

[10]有关指令重排序的进一步内容,请参考Java内存模型(JMM,Java Memory Model)的相关资料。

[11]当然,如果Web服务端程序对多个请求的处理之间存在共享资源(比如数据库),那么对一个请求的处理快慢实际上仍然会影响到对其他请求的处理。

[12]例如,一个系统被分解为多个模块,每个模块是一个Java进程(程序),各个模块间通过网络通信。