JAVA体系的线程的实现,线程的调度,状态的转换
java体系中线程的实现
1.使用内核线程实现
内核线程就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上,每个内核线程可以视作内核的一个分身,这样操作系统就有能力处理多件事情,支持多线程的内核就叫做多线程内核,程序一般不会其使用内核线程,而是去使用内核线程的一种高级接口:轻量级进程,轻量级进程就是我们通常意义上的线程,由于每个轻量级进程都有一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程(1:1关系),由于内核线程的支持,每个轻量级进程都成为一个独立的调度单元,即使有一个轻量级进程在系统中阻塞了,也不会影响整个进程的工作,但是轻量级进程有局限性:1.由于是基于内核线程实现的,所以线程的各种操作(创建,析构,同步)都需要进行系统调用,而系统调用的代价高,需要在用户态和内核态中来回切换,2.每个轻量级进程都需要一个内核线程的支持,因此轻量级进程要消耗一定的内核资源,因此系统支持的轻量级进程是有数量限制的
2.使用用户线程实现
完全建立在用户空间的线程库上的线程,系统内核不能感知线程的存在,用户线程的建立,同步,销毁和调度完全在用户态中实现,如果程序实现得当,这种线程不需要切换到内核态,操作可以快速和低消耗,可以支持规模更大的线程数量,部分高性能数据库中的多线程就是由用户线程实现的,但是由于不用切换到内核态,所以一些问题得不到内核的帮助,比如阻塞任何处理,多处理器系统中任何将线程映射到其他处理器上,这些问题解决起来异常困难
3.使用用户线程加轻量级进程混合实现
即存在用户线程,又存在轻量级进程,用户线程还是完全建立在用户空间当中,用户线程的创建,切换,析构等操作依然廉价,并可以支持大规模的用户线程并发,而操作系统提供的轻量级进程则作为用户线程和内核之间的桥梁,这样可以使用内核提供的线程调度功能和处理器映射,并且用户线程的1系统调用要通过轻量级进程来完成,大大降低了整个经凑被完全阻塞的风险
java体系中线程的调度
主要有两种调度方式:协同式线程调度,抢占式线程调度
1.协同式线程调度:线程的执行时间由自身控制,线程把工作执行完之后,通知系统切换到另一个线程上,协同式调度最大的好处就是实现简单,而且由于线程要把自己的事情干完才会进行线程切换,切换线程对自己也是可知的,所以不存在线程同步的问题,坏处就是线程执行时间不可控,甚至如果一个线程编写有问题,一直不告诉系统进行线程切换,那么程序就会阻塞
2.抢占式线程调度:每个线程将由系统来分配执行时间,线程的切换不由线程本身来决定,线程执行时间可控,不会有一个线程导致整个进程阻塞问题
“建议给某些线程多分配点时间”就引出了线程优先级的概念,优先级越高的线程越容易被系统选择执行
虽然很多操作系统都有线程的优先级,但是这些优先级不一定可以与java中的线程优先级一一对应!
java体系中线程的状态
java定义了5种线程状态,一个线程在任意一个时间点只能有其中一种状态!
1)新建:创建后尚未启动的线程
2)运行:包括操作系统中的正在运行和就绪两种状态,也就是处于此状态的线程可能正在运行或者等待cpu分配时间
3)等待:
*无限期等待:处于这种状态的线程不会被cpu分配执行时间,他们要等待被其他线程唤醒
*限期等待:处于这种状态的线程也不会被cpu分配执行时间,不过无需等待其他线程唤醒,在一定时间后可以由系统唤醒
4)阻塞:阻塞状态在等待获取一个排他锁
5)结束:已终止线程的线程状态
JAVA体系的线程的实现,线程的调度,状态的转换的更多相关文章
- Java基础图解,JVM,线程,Spring,TCP,SpringMVC等开发体系图解
Java基础图解,JVM,线程,Spring,TCP,SpringMVC等开发体系图解 1.Java虚拟机运行时数据区图 2. 堆的默认分配图 3.方法区结构图 4.对象的内存布局图 5.对象头的Ma ...
- 死磕 java线程系列之线程池深入解析——未来任务执行流程
(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 前面我们一起学习了线程池中普 ...
- Java 线程和操作系统的线程有啥区别?
尽人事,听天命.博主东南大学硕士在读,携程 Java 后台开发暑期实习生,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收 ...
- 额!Java中用户线程和守护线程区别这么大?
在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知,所以本文磊哥带你来看二者之间的区别,以及守护线程需要注意的一些事项. 1.默认用户线程 Java 语言中无论是线程还是 ...
- 0039 Java学习笔记-多线程-线程控制、线程组
join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long ...
- Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)
线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...
- java多线程系类:JUC线程池:05之线程池原理(四)(转)
概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...
- java多线程系类:JUC线程池:03之线程池原理(二)(转)
概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...
- java多线程系类:JUC线程池:04之线程池原理(三)(转)
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--"基础篇& ...
随机推荐
- WordPress 新版本中编辑器不好用, 使用原有编辑器
将以下代码添加到当前主题的函数模板 functions.php 文件中即可. add_filter('use_block_editor_for_post', '__return_false'); re ...
- python爬虫入门---第三篇:自动下载图片
适用的图片网站:美桌 源代码: import requests import re import urllib from bs4 import BeautifulSoup def get_html_t ...
- Windows下使用Rtools编译R语言包
使用devtools安装github中的R源代码时,经常会出各种错误,索性搜了一下怎么在Windows下直接打包,网上的资料也是参差不齐,以下是自己验证通过的. 一.下载Rtools 下载地址:htt ...
- (后台)Java:对double值进行四舍五入,保留两位小数的几种方法
mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); double ...
- system.transfer.list深度解析
system.transfer.list system.new.dat 很明显,通过名字我们就知道这两个文件的作用,system.new.dat为数据部分,system.transfer.list为 ...
- python爬虫之Beautifulsoup学习笔记
相关内容: 什么是beautifulsoup bs4的使用 导入模块 选择使用解析器 使用标签名查找 使用find\find_all查找 使用select查找 首发时间:2018-03-02 00:1 ...
- 洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性
在上一篇博文里,传入参数时,是在实例化对象后且在调用方法时才传入参数,感觉是不是有点繁琐对吧?可以在实例化的时候就传入参数吗?可以的,这就是本篇博文的要讲到的构造器——__init__(两边双下划线) ...
- Nginx安装成Windows服务
因为有项目使用Nginx来做负载均衡,但是Nginx的Windows版本是不提供安装成服务的,所以服务器重启后Nginx并不会伴随启动和恢复.网上查了下,这里记录下解决方法,防止遗忘. 第一步:下载W ...
- C语句详细(初学者)
C程序的执行部分是由语句组成的.程序的功能也是由执行语句实现的. C语句分为以下六类: 1.表达式语句:表达式加上分号“:”组成.执行表达式语句就是计算表达式的值. 2.函数调用语句:函数名.实际参数 ...
- 软件工程实践_结对Task2_ student_department_matching
1. 给出结对成员的学号及姓名. 结对成员 031502506 陈龙江 031502529 王国超 click 2.首页给出项目的Github链接. github:传送门 3. 贴出你们生成的一组最& ...