状态

线程主要有“新建”(NEW)、“就绪”(RUNNABLE)、“运行”(RUNNING)、“阻塞”(BLOCKED)、“死亡”(DEAD)五种状态。


多处理器,处理器提供了总线锁定缓存锁定两个机制来保证复杂内存操作的原子性。
当处理器要操作一个共享变量的时候,其在总线上会发出一个Lock信号,这时其它处理器就不能操作共享变量了,该处理器会独享此共享内存中的变量。但总线锁定在阻塞其它处理器获取该共享变量的操作请求时,也可能会导致大量阻塞,从而增加系统的性能开销。
于是,后来的处理器都提供了缓存锁定机制,也就说当某个处理器对缓存中的共享变量进行了操作,就会通知其它处理器放弃存储该共享资源或者重新读取该共享资源。目前最新的处理器都支持缓存锁定机制。

Linux 内核提供的 vmstat 命令,来监视 Java 程序运行过程中系统的上下文切换频率。
[root@aliyun ~]# vmstat 2
//时间间隔
procs —————-memory————— —-swap— ——-io—— -system— ———cpu——-
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 82800 133624 537868 0 0 4 13 12 25 1 0 99 0 0
image.png
如果是监视某个应用的上下文切换,可以使用 pidstat命令监控进程的 上下文切换。
pidstat -w -l -p
26571** 1 100

多线程 - 图2

**