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)