Java与线程

本文从以下方面Java与线程的内容:

一、线程实现

二、Java线程调度

三、状态转化

一、线程实现

        线程是比进程轻量级的调度执行单位,线程引入,可以把进程的资源分配与调度分开,各个线程可以共享资源又可以独立调度;

        线程是CPU调度的基本单位;

1、线程的实现方式

      此处,并非java线程的实现。

      三种线程实现的方式:内核线程实现,用户线程实现,用户线程加上轻量级的进程的混合实现       

 (1)内核线程(Kernel thread,KLT)

          由操作系统内核支持的线程,这种线程由内核完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。

          程序不会直接使用内核线程,使用内核线程的一个高级接口--轻量级进程(Light weight Process,LWP),轻量级进程就是通常意义的线程,先有内核线程,才有轻量级进程。

(2)用户线程(User thread,UT)

          完全建立用户空间线程库上,系统内核不能感知线程存在。线程的建立,同步,销毁,调度,不需要内核参与完全由用户态中完成。

          程序实现得当,不需要与内核线程进行切换高效率低消耗。

          缺点:没有内核线程的保障,操作系统分配了资源给进程,诸如:”阻塞如何处理“,”多处理器系统如何将线程映射到其他处理器“这类问题的解决就会异常困难。

(3)混合线程

         用户线程与内核线程一起实现。

         操作系统支持轻量级进程作为内核线程与用户线程之间的桥梁,内核提供线程的调度及处理器映射功能,用户线程的系统调用通过轻量级线程完成,降低了进程被阻塞的风险。

2、java线程的实现

     JDK1.2之前名为“绿色线程”的用户线程实现,JDK1.2之后基于操作系统的原生线程实现。

二、Java线程调度

       调度方式有两种:协同式线程调度、抢占式线程调度

1、协同式线程调度

     优点:

              线程执行时间由线程本身控制;

              实现简单,线程执行完成自己的线程任务才会切换另外一个线程,切换操作自己可知;

     缺点:

              线程执行时间不可控制,如果一个线程出现问题,没有及时通知系统进行切换,将会使程序阻塞;

2、抢占式线程调度

     优点: 

              每个线程由系统分配执行时间,线程切换不由线程本身决定;

三、状态转换

        java语言定义进程的6中状态:

        新建(New)、运行(Runable)、无限等待(Waiting)、限期等待(Timed Waiting)、阻塞(Blocked)、结束(Terminated)



 

            

猜你喜欢

转载自1498116590.iteye.com/blog/2412463