JVM学习(七):Java与线程

1、操作系统线程:轻量级的进程,是CPU调度的基本单位。线程的引入,可以把一个进程的资源分配执行调度分开,各个线程之间共享进程资源(内存地址、文件I/O等)。

2、Java线程:一个已经执行了start()且还未结束的java.lang.Thread类的实例。

3、线程模型

(1)内核线程(Kernel-Level Thread,KLT):直接由操作系统内核支持的线程,程序运行时通过使用内核线程的一种高级接口轻量级进程(Light Weight Process,LWP)和内核线程形成一对一的关系,这种方式系统调用线程的代价比较高,需要在用户态(User Mode)和内核态(Kernel Mode)之间来回切换。

(2)用户线程(User Thread,UT):非内核线程,特指完全在用户态下创建使用的线程,不需要系统内核的支持,一个进程对应多个用户线程,形成一对多的关系。用户线程运行快速低耗,但由于缺少系统内核的支持,实现程序比较复杂,出现异常时难以处理。

(3)用户线程混合轻量级进程:操作系统的内核线程通过轻量级进程来实现对用户线程的调用,用户线程仍然只需在用户态下创建,用户线程轻量级进程之间形成多对多的关系。

(4)Java线程通常采用一对一的线程模型,一条Java线程就映射到一条轻量级进程之中。

4、线程调度主要有协同式线程调度(Cooperative Threads-Scheduling)和抢占式线程调度(Preemptive Threads-Scheduling)两种,Java使用的线程调度方式为抢占式调度。

5、Java语言定义的线程状态:

(1)新建(New)

(2)运行(Runnable):包括就绪和运行两种状态。

(3)等待(Waiting):需要等待被其他线程显示地唤醒。

(4)定时等待(Timed Waiting)

(5)阻塞(Blocked):等待获取一个排他锁,会在另外一个线程放弃时获得。

(6)结束(Terminated)

猜你喜欢

转载自www.cnblogs.com/xy80hou/p/11405630.html