Java线程

Posted qionglouyuyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java线程相关的知识,希望对你有一定的参考价值。

JAVA线程实现的三种方式:

1. 使用内核线程(Kernel-Level Thread,KLT)

  • 由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。
  • 轻量级进程(Light Weight Process,LWP):内核线程的一种高级接口
    • 优点:LWP与KLT1对1,因此每个都成为一个独立的调度单元,即使有一个轻量级进程在系统调用中阻塞,也不会影响整个进程继续工作。
    • 缺点:由于基于内核线程实现,所以各种线程操作(创建、析构及同步)都需要进行系统调用,代价相对较高,需要在用户态(User Mode)和内核态(Kernel Mode)中来回切换;另外,一个系统支持轻量级进程的数量是有限的。
2.  使用用户线程(User Thread,UT)
  • 优点:由于用户线程的建立、同步、销毁和调度完全在用户态中完成,不需要内核的帮助,甚至可以不需要切换到内核态,所以操作非常快速且低消耗的,且可以支持规模更大的线程数量。
  • 缺点:由于没有系统内核的支援,所有的线程操作都需要用户程序自己处理,线程的创建、切换和调度都是需要考虑的问题,实现较复杂。
  • 进程与用户线程1对n的关系
3. 使用用户线程加轻量级进程混合
  • 优点:以支持大规模的用户线程并发,且用户线程的系统调用要通过轻量级线程来完成,大大降低了整个进程被完全阻塞的风险。
  • 用户线程与轻量级进程之间多对多的关系

作者:厘米姑娘
链接:https://www.jianshu.com/p/90a036212cb4
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


作者:厘米姑娘
链接:https://www.jianshu.com/p/90a036212cb4
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Java线程调度的两种方式:

1. 协同式线程调度(Cooperative Threads-Scheduling)

  • 由线程本身来控制线程的执行时间。线程把自己的工作执行完后,要主动通知系统切换到另外一个线程上。
  • 好处:实现简单;切换操作自己可知,不存在线程同步的问题。
  • 坏处:线程执行时间不可控,假如一个线程编写有问题一直不告知系统进行线程切换,那么程序就会一直被阻塞。

2. 抢占式线程调度(Preemptive Threads-Scheduling)

  • 由系统来分配每个线程的执行时间。
  • 好处:线程执行时间是系统可控的,不存在一个线程导致整个进程阻塞的问题。可以通过设置线程优先级,优先级越高的线程越容易被系统选择执行。

以上是关于Java线程的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程 2.线程安全

Java多线程 4.线程池

Java多线程 1.认识Java线程

java 子线程 回调 主线程

Java线程池

java 如何获得线程池中正在执行的线程数?