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进程(程序),各个模块间通过网络通信。