java 多线程基础--多线程及并发

当多任务同时运行的时候,我们称之为并发。

在cpu单核的情况下,多任务轮流获得时间片,在多核的情况下多任务可同时运行。

这里的任务我们可以简单理解为线程。

我们可以通过new Thread()来创建java的线程。


关于主线程

当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程。

也就是在new Thread()之前,所有的代码都运行在主线程里。

主线程的重要特性体现在下面两个方面
1. 它是产生其它子线程的线程
2. 通常必须最后完成执行,因为要执行各种关闭动作
一个Java程序在执行时会首先创建一个主线程main线程,因此如果在程序中创建了n个线程,则程序中共有n+1个线程
对于一个线程对象start方法只能被执行一次,如果
对同一线程对象多次执行start方法,JVM将抛出:
IllegalThreadStateException


所谓多线程的并发运行,其实就是指各个线程轮流获得CPU的使用权,分别执行各自的任务。而线程何时获得CPU的使用权是由Java虚拟机说了算的。

Java虚拟机的一项任务就是负责线程的调度。线程的调度是指按照特定的机制为多个线程分配CPU的使用权。有两种调度模型:1 分时调度模型 2 抢占式调度模型。即:preemptive andcooperative

分时调度模型是让所有线程轮流获得CPU的使用权,并且平均分配每个线程占用的CPU的时间片。
java虚拟机采用抢占式调度模型,它是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中线程的优先级相同,那么就随机的选择一个线程,使其占用CPU。处于运行状态的线程会一直占有CPU运行,直至它不得不放弃CPU。一般有下面3个原因:
1 java虚拟机让当前线程暂时放弃cpu 转到就绪状态,使其他线程获得运行机会
2 当前线程因为某些原因而进入阻塞状态
3 线程运行结束
值得注意的是,线程的调度不是跨平台的。
它不仅取决于java虚拟机,还依赖于操作系统。

在某些系统中,只要运行的线程没有遇到阻塞,就不会放弃CPU,在某些系统中,即使没有遇到阻塞,也会运行一段时间后放弃CPU,给其他线程运行的机会。

你可能感兴趣的:(java 多线程基础--多线程及并发)