Java线程调度

1.Java线程的实现
JDK1.2之前 JDK1.2之后
用户线程的实现 基于操作系统原生线程

所以,在JDK1.2之后操作系统支持怎样的线程模型决定了Java虚拟机的线程是怎样映射的。

2.Java线程调度

两种调度方式:

  • 协同式调度
  • 抢占试调度

2.1协同式调度

线程执行时间由线程本身控制,线程把自己的工作执行完了之后,要通知系统切换到另一个线程上。

优点 缺点
实现简单,没有线程同步的问题 线程执行时间不可控制,若线程发生阻塞,则程序会一直阻塞在那里

2.2抢占式调度

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

缺点 优点
线程安全问题 线程执行时间可控,不会因为一个线程导致整个进程阻塞

Java使用的是抢占式线程调度

3.线程优先级

Java语言一共设置了10个级别的线程优先级(Thread.MIN_PRIORITY-Thread.MAX_PRIORITY)在两个线程同时处于Ready状态时,优先级越高的线程越容易被系统选择执行。
但是优先级并不是太靠谱,因为Java线程是通过映射到操作系统的原生线程上来实现的,所以调度还是取决于操作系统,而操作系统的优先级可能不与Java线程优先级一一对应。

你可能感兴趣的:(JavaSE)