多线程(一)多线程基础

1.线程分类:用户线程,守护线程。

二者区别:

1.用户线程会阻止JVM正常停止,守护线程不会。

2.守护线程主要执行一些重要性不高的任务。

 

2.线程的状态与上下文切换(CS)

线程从running状态切换到blocked,waiting,timed_waiting中的任何一种都会导致上下文切换,产生额外的性能消耗(恢复上下文信息、线程调度CPU时间、缓存缓存失效)。

 

3.线程监视工具

jdk自带jvisualvm, Jdk8中的JMC

 

4.synchronizedvolatile

synchronized通过该关键字包括的临界区(Critical Section)的排他性,使得临界区中的代码代表一个原子操作,同时还可以保证一个线程执行临界区代码的值对后面线程是可见的(内存可见性)。

volatile关键字可以保证内存可见性,同时还禁止了指令重排,让代码按照期望顺序执行。

synchronized会导致上下文切换,volatile不会。

 

5.线程的优势和风险

优势:

1.提升系统吞吐量(多个任务可并行执行)。

2.提高响应性(GUI应用界面响应迅速,WEB应用请求互不影响)。

3.充分利用多核资源。

4.节约系统资源。(线程可共享进程资源)。

劣势:

1.线程安全。

2.生命特征问题。(某些线程永远处于READY状态,得不到CPU时间进入RUNNING状态)。

3.上下文切换消耗额外资源。

4.可靠性。(进程崩溃,线程也受牵连)。