两种线程的调度模式:

抢占式调度:

抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。

协同式调度:

协同式调度指某一线程执行完后主动通知系统切换到另一线程上执行,这种模式就像接力赛一样,一个人跑完自己的路程就把接力棒交接给下一个人,下个人继续往下跑。线程的执行时间由线程本身控制,线程切换可以预知,不存在多线程同步问题,但它有一个致命弱点:如果一个线程编写有问题,运行到一半就一直堵塞,那么可能导致整个系统崩溃。

JVM的实现:

JVM规范中规定每个线程都有优先级,且优先级越高越优先执行,但优先级高并不代表能独自占用执行时间片,可能是优先级高得到越多的执行时间片,反之,优先级低的分到的执行时间少但不会分配不到执行时间。

java使用的线程调度式抢占式调度

Java中线程会按优先级分配CPU时间片运行

线程让出cpu的情况:

当前运行线程主动放弃CPU,JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系统不会让线程永久放弃CPU,或者说放弃本次时间片的执行权),例如调用yield()方法。

当前运行线程因为某些原因进入阻塞状态,例如阻塞在I/O上。

当前运行线程结束,即运行完run()方法里面的任务。

多线程跑调度_java多线程中的调度策略相关推荐

  1. java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...

    多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 packagethread_test;public class ThreadDemo1 extendsTh ...

  2. java多线程 cpu分配_java多线程总结(转载)

    Java 多线程编程总结 --------------------------------------------------------------------------------------- ...

  3. java 多线程 返回值_JAVA多线程实现和应用总结:如何使用有返回值的多线程

    最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用E ...

  4. java多线程 修改优先级_Java多线程-线程的调度(优先级)

    与线程休眠类似,线程的优先级仍然无法保障线程的执行次序.只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行. 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先 ...

  5. java 多线程bean 注入_java多线程中注入Spring对象问题

    信息加密之Base64 Base64是一种最简单的简单的加密形式,经常被使用,记录一下,以便日后可以深入了解. jdk格式: //获得密钥Base64Encoder encoder = new Bas ...

  6. java多线程工具类_Java多线程系列之:线程的并发工具类

    一,Fork-Join 1,定义: Fork-Join框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不能再拆时),再将一个个的小任务运算的结果进行join汇总. 2, ...

  7. java main是多线程的吗_Java多线程之线程及其常用方法

    创建线程和常用方法 进程与线程的概念进程 进程是程序执行时的一个实例.程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开 ...

  8. java 多线程并发 问题_JAVA多线程和并发基础面试问答

    原文链接 译文连接作者:Pankaj  译者:郑旭东  校对:方腾飞 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌 ...

  9. java多线程传值覆盖_Java 多线程传值的四种方法

    其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数据 3:通过回调函数传递数据 那么博主有个非常变态的需求,所以找出了第四种实现方式,先看效果图: 动态Cron4 ...

最新文章

  1. libev源码解析——定时器原理
  2. 你可以不知道的JS二
  3. 网络编程 socket模块 tcp协议 udp协议
  4. Linux(Centos7)安装Docker
  5. mysql set 常用参数_mysql常见配置参数
  6. TCP/IP(二):IP协议
  7. 计算机运维知识点,系统运维必会知识点
  8. SQL的数据定义功能及语句:
  9. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型
  10. python入门——P39类和对象:拾遗
  11. linux重启切换内核,centos7切换启动内核与切换启动模式的讲解
  12. 第二章 如何在VS2008里面编译CG
  13. tensor索引[..., 0]
  14. Python open()函数文件打开、读、写基础操作
  15. [UI] 精美UI界面欣赏[11]
  16. laravel如何利用数据库的形式发送通知
  17. 存储器分类和硬盘缓存介绍
  18. 计算机基础知识(面试),新人面试计算机基础知识试题
  19. 扇贝python课程免费_购买扇贝python后,未有任何提示和提醒,突然停止课程服务。...
  20. 909422229_Mysql创建序列

热门文章

  1. linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
  2. maven 阿里云的镜象
  3. SQL锁机制和事务隔离级别
  4. 服务器和客户端Socket单向通信例子
  5. 注解描述(持续更新)
  6. 你不懂,仅仅有程序猿懂
  7. [php基础]PHP环境变量$_SERVER和系统常量详细说明
  8. FZU 2108 Mod problem
  9. 消息(4)——WS附件传输,包体中的base64编码附件
  10. 摘抄一篇:图的存储结构