当多任务同时运行的时候,我们称之为并发。
在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 模拟线程并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) ...
详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...
Java 多线程与并发(2_26)Java 并发 - 线程基础
java多线程并发的在新窗口
代码里面包含一个并发4个线程同时运行 全部开始 全部停止 单个停止还有点问题。 还有生产者消费者 里面的里面能帮助你理解多线程的运用!
源码简介01_串行与并发02_进程与线程"03线程寿命04.线程开发05_线程命名06_线程休眠07_线程优先级08_线程礼貌09_关键资源问题关键../等待...源码详情01_串行与并发02_进程与线程"03线程的生命04.线程的开辟05_线程的...
java多线程按需交替执行,java新特性。
Java 多线程与并发-Java并发知识体系详解
Java 多线程与并发(1_26)-Java 并发 - 理论基础
并发库高级应用\多线程\Java
Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的调度-让步 19 Java线程:线程的调度-合并 22 Java线程:...
java多线程与高并发java多线程与高并发java多线程与高并发
人工智能-项目实践-多线程-Java多线程高并发实例 Java多线程高并发实例
java多线程并发查询数据库,使用线程池控制分页,并发查询。
Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程
Tesseract OCR多线程并发识别案例----只演示多线程并发识别,此工具不关注识别正确率,可通过训练tessdata来获得更高的识别正确率。
Java多线程实战精讲-带你一次搞明白Java多线程高并发