在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
线程基础知识Java并发编程,进程和线程是操作系统内两个很基的概念,进程是操作系统中进行保护和资源分配的基本单位,操作系统分配资源以进程为基本单位。而线程是进程的组成部分代表了一条顺序的执行流。

1、线程基础概念
线程是指在一个单独进程中,对于CPU和内存而言的多个工作单位,所有线程在进程中的资源都是共享的,包括全局数据、执行代码等。
cpu核心数与线程数
核心数 : 线程数 = 1 : 1
如一个8核的cpu,该cpu会至少支持8个线程同时运行
intel引入了超线程技术后:
核心数 : 线程数 = 1 : 2
在编码过程中可以感觉到同时运行的线程远远不止这些。由于cpu的时间片轮转机制又称RR调度,简单点讲,操作系统会把已就绪的线程排成一个队列,给每个进程一个时间分片,该线程在cpu中执行完这个时间分片后,不论是否执行完都会让出cpu资源给另外的线程,这样在某一时间段内就好像有很多线程在同时运行。
操作系统和cpu在进行时间分片的任务切换时也是需要时间的,而且往往占用的时间比例又很大,所以在多线程开发时关注上下文切换对于多线程执行时间和性能的影响。
二、进程和线程区别
进程:程序运行进行资源分配的最小单位,进程中有多个线程,会共享这个线程的资源
线程:cpu调度的最小单位,必须依赖进程而存在
例子:启动的一个jar包程序就是一个进程,而可以通过启动参数配置它的内存大小,-xmx,-xms等。而每一个请求都是在线程上去进行的,cpu通过执行线程任务完成每个请求任务。
三、并行和并发
并行:同一时刻,可以同时处理事情的能力
并发:与单位时间有关,在单位时间内可以处理问题的能力
举个例子,假设不考虑超线程技术,一个4核cpu在任何一个时刻处理的是4个线程,并行数为4,而由于时间片轮转机制,它在1秒内可以支持处理100个线程,它在1秒内的并发数为100
四、高并发编程优势
充分利用cpu的资源。如果是单线程,只占用一个核,其它的空闲;加快响应时间。合理的设计多线程程序,使请求处理加快;程序模块化异步化
线程共享资源,会存在冲突、会存在死锁、启动线程太多,滥用线程,压垮服务器。线程方法,java线程是协作式的,而不是抢占式
五、线程终止的方法interrupt()
线程之前提供了stop(),resume(),suspend()方法来终止线程,但已不建议使用,stop()会导致线程不会正确的释放资源,suspend()会导致死锁。
要通过interrupt(),isInterrupted(),static interrupted()来自己实现中断线程
interrupt() :调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,只是跟这个线程打个招呼,将线程的中断标志位置为true,线程是否中断,由线程本身决定。
isInterrupted(): 判定当前线程是否处于中断状态。
static interrupted() :判定当前线程是否处于中断状态,同时中断标志位改为false。
thead.setPriority()方法
优先级的范围1~100,缺省为5,但线程的优先级不可靠,不建议作为线程开发时候的手段。
java线程是映射到系统的原生线程来实现的,所以线程的调度最终决定于操作系统。虽然现在很多操作系统提供了线程优先级的概念,但是不见得会与java线程的优先级一一对应,如果优先级比java线程多还好说,要是少的话,就不得不出现几个优先级相同的情况了。
不能太依赖优先级,优先级可能会被系统自行改变。在widows系统存在着一个“优先级推进器”,它的大致作用就是当前系统发现一个线程执行的特别“勤奋努力”的话,可能就会越过线程优先级给它分配时间。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
JavaEE学习基础:如何学习spring
Spring是Java开发中常用的一个框架,不仅仅可以用于服务器端的开发。从简单性、可测试性以及松耦合性角度而言,绝大部分的Java应用都可以从spring中收益。这也是为什么Java开发程序员都比较喜欢使用spring的原因。
8640
2019-05-17 17:19:23
Java基础学习:面向过程与面向对象
刚开始学编程的时候都会遇到一个思维转变的过程,从原来人类思维模式转变成机器可以接受的思维模式。这个过程是非常难的,这也是为什么互联网人才能够获得高薪的原因。对于Java学习,面向过程可能更接近人的正常思维,而面向对象思维就是一个巨大的挑战了。本文就和大家聊一聊关于面向过程和面向对象的优劣。
7911
2019-06-24 18:35:01
企业级租房网项目实战学什么?
程序员面试项目经验必不可少,企业级租房网实战项目要掌握,学习实现技术与思维融合,理解原理到应用积累经验,掌握Flutter开发的相关技能。企业级租房网实战学习租房网项目架构搭建、项目主界面骨架开发、项目首页开发、房源详情界面开发、登录/注册与个人中心页开发、个人信息与收藏功能开发、发布与上线等内容。
5259
2019-12-30 18:44:08
Java安全框架Shiro基础知识学什么?
Java安全框架Shiro基础需要掌握Shiro最新版本基础,还要掌握Shiro框架的三大核心组件Subject、SecurityManager、Realms及其工作流程;学习Shiro主要功能:认证、授权、加密;Shiro Web集成、Shiro与SpringBoot整合使用;深度剖析Shiro框架的核心原理,让学习者掌握执行逻辑。
6103
2020-03-12 10:07:15
Java运算符知识点总结
拥有程序思维的第一步,就是要学会用计算机、或者说编写程序帮我们处理数据,而不是我们自己动手。Java语言中有很多进行数据运算的方式,就如前面所说,包括但不限于:算术运算、比较运算、逻辑运算、赋值运算、三目运算等。每一种运算方式,又都包含了很多的运算符,学习Java中的运算,就是学习这些运算符的使用。下面一起来看看Java运算符知识点总结吧!
5152
2020-08-11 16:39:51
