白话说编程之java线程

白话说编程之java线程

  • 线程和进程:
      • 进程:
      • 线程:
      • 线程和进程的区别:
  • 详解多线程:
      • 并发
        • 为什么使用并发
        • 并发的执行原理
      • 并行
  • 线程的五种状态:
      • 创建状态:
      • 就绪状态:
      • 运行状态:
      • 阻塞状态:
      • 死亡状态:
  • 线程的创建方式:
      • 继承Thread
      • 实现Runnable
      • 匿名内部类方式
      • 迷惑问题
            • 继承THread类方法和实现Runnable接口 这两种方式选择哪一种好呢?
            • 继器启动线程是调用run方法还是start方法
  • 线程的分类:
      • 用户线程(也叫前台线程):
      • 守护线程(也叫后台线程):
    • 分享一波:程序员赚外快-必看的巅峰干货

线程和进程:

在说多线程之前,我们先来研究一下线程,说到线程,我们又不得不说到进程,因为很多初学者会把线程和进程分不清,搞混淆。

进程:

是操作系统系统运行的最小单元。怎么理解这句话,可以这样去对比,相信大家都见过积木玩具,可以搭建成很多的大型成品(操作系统Windows/Linux等等),而每一个积木都是组成这个成品的一个组件(也就是进程单元)这是操作系统和进程的关系(操作系统的组成很复杂,不是像积木简单的组合就能完成的,但是最底层原理我们可以这么想象是没有问题的)。

线程:

线程是一组指令的集合,它可以独立的运行在一个进程里。关于指令的集合:就是指我们编程里写的一个类,里面用到的关键字、方法名、变量名等等都是指令(你们可以这样去理解,完全没有问题,这里声明一下真正的指令是jvm编译成.class文件后,.class中的二进制码才是真正的指令,但是二进制码对于人类来说太多太难记,所以就用关键字来代表二进制的含义)。在这里我们又可以把线程去当成一个积木,而进程是一个个积木所组成的成品。

线程和进程的区别:

通过上面的例子,不难理解进程和线程之间的关系,进程包含线程,线程是进程的一个单元。所以在这里我们要注意一下,在进程中至少包含一个线程(主线程)。(这样讲,一个积木都没有还会有成品吗)

总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径。
在这里插入图片描述

详解多线程:

在上面的例子中,我们知道线程和进程的区别,对于多线程的具体作用我们在这里详细解释。

并发

并发:多个线程在一个单核cpu上进行资源抢占并运行,就是并发。
多线程在cpu中是并发运行的(下面会详细解释并发,还有和并行的区别)
首先我们要知道在cpu(这里指的是单核cpu)中在某一个时间片,只能有一个线程在cpu中运行。一个cpu在同一时间只能执行一个线程。
在这里插入图片描述

为什么使用并发

在一个进程中有多个线程需要执行,这些线程会抢占cpu的时间片来运行自身。有人会问,为什么不等一个线程执行完之后再去执行另一个线程呢?思考一下,我们在使用电脑的时候,可以同时看文档,听音乐。如果cpu设计成一个线程执行完之后再去执行另一个线程,你就只能听完音乐,在去看文档,在听音乐的过程中你的鼠标都移动不了(鼠标也是一个单独线程),你们觉得这样的体验好吗,所以cpu肯定不能这样设计。

并发的执行原理

操作系统是以抢占式的方法来调度线程的(也有其他方法,我们目前先学这一种)。就是线程自己去强cpu的资源,谁先抢到谁就在cpu上运行一个时间片(这个时间片很短很短)。这里的线程会有优先级的特点,优先级高的线程抢到cpu的概率大,概率大,概率大(是概率大,不代表一定能抢到)运行完成之后释放cpu资源,回去重新抢占cpu。因为运行的时间很短,所以在人为感官上觉得这些线程始再同时运行的。
其实上面多个线程抢占cpu资源就是多线程的并发。

注意:这里是一个cpu。随着需求的不断增高,科技的不断发展,单核cpu的性能已经不能满足效率。于是就出现了多核cpu,也就出现了并行

并行

并行:在同一时间点,多个线程同时运行在多核cpu的多个核上,这叫并行。和并发不同的是:同一时间,在并行中,线程可以同时运行,而并发则只能有一个线程运行。
在这里插入图片描述

线程的五种状态:

创建状态:

当用new操作符创建一个线程时, 例如new Thread®,线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码

就绪状态:

一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。
处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。

运行状态:

当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.

阻塞状态:

线程运行过程中,可能由于各种原因进入阻塞状态:
1>线程通过调用sleep方法进入睡眠状态;
2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
3>线程试图得到一个锁,而该锁正被其他线程持有;
4>线程在等待某个触发条件;

死亡状态:

有两个原因会导致线程死亡:
1> run方法正常退出而自然死亡,
2> 一个未捕获的异常终止了run方法而使线程猝死。
为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true; 如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.

如图所示:
在这里插入图片描述

线程的创建方式:

继承Thread

在这里插入图片描述

实现Runnable

在这里插入图片描述

匿名内部类方式


上面只要会继承THread类方法和实现Runnable接口这两种就行,还有其他的线程池创建等等,在后面的章节说

迷惑问题

继承THread类方法和实现Runnable接口 这两种方式选择哪一种好呢?

在java语言中,有一个特点,就是单继承,多实现。实现了接口还可以继续继承,继承了类不能再继承。所以一般情况下使用实现Runnable会有更好的拓展性。

继器启动线程是调用run方法还是start方法

Run方法仅仅只是线程所要执行的代码块部分,如果调用run方法,就和调用其他普通方法一样,从上到下,顺序执行。没有了多线程的特点。所以使用start方法使线程进入就绪状态。

线程的分类:

用户线程(也叫前台线程):

用户自定义创建的线程,用户线程的状态不受其他线程的影响。别的线程挂了就挂了,影响不到他,因为他们是互相独立的。

守护线程(也叫后台线程):

守护线程受用户线程的影响,当用户线程销毁后,守护线程也会跟着销毁。比如GC

分享一波:程序员赚外快-必看的巅峰干货

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powerdesigner显示工具面板_photoshop教程-画笔工具预设与选项设置

定义画笔预设在打开的“画笔”面板中,单击左侧的“画笔笔尖形状”名称,可显示笔尖形状图案。单击“画笔”面板左侧其他不同的选项名称,在右侧就会显示其对应的调节项。只单击不同选项前面的方框,可使此选项有效,但右侧…

深入理解== 和 equals 的区别

深入理解 和 equals 的本质区别简介区别:图解:注意点:源码分析:总结分享一波:程序员赚外快-必看的巅峰干货简介 初学者常常被" “和‘equals ’所折磨,为什么,因为他们的大概意思相同,都是…

java sleep和wait区别

为什么80%的码农都做不了架构师?>>> 关于sleep和wait区别解析: sleep只是释放CPU资源,并不释放资源锁对象,wait是会释放掉资源锁对象。 比如,有个锁对象object,线程1和线程2都会锁住object对象…

深入理解equals和hashCode关系和区别

深入理解equals和hashCode关系和区别直入主题:区别:1.他们判断对象相同的方式不一样:2.他们判断对象是否相等的准确率不一样:改写equals时总是要改写hashcode分享一波:程序员赚外快-必看的巅峰干货为什么要说equals和hashCode这两…

Jdk 和 jre 的 关系和区别

Jdk 和 jre 的 关系和区别 区别: JDK:是Java Development Kit 的简称–>翻译过来就是:Java 开发工具包。是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。 JRE:是Java Runtime Environm…

OpenCV-Python入门教程7-PyQt编写GUI界面

前面一直都是使用命令行运行代码,不够人性化。这篇用Python编写一个GUI界面,使用PyQt5编写图像处理程序。包括:打开、关闭摄像头,捕获图片,读取本地图片,灰度化和Otsu自动阈值分割的功能。 使用Qt Designer…

spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用

点击蓝字关注我前面用了一篇文章详细的介绍了集群HDFS文件系统的搭建,HDFS文件系统只是一个用于存储数据的系统,它主要是用来服务于大数据计算框架,例如MapReduce、Spark,本文就接着上一篇文章来详细介绍一下Spark集群的搭建及Spa…

如何将本地项目上传到gitee

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

2019独角兽企业重金招聘Python工程师标准>>> 查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time Apply MRP0: Back…

VMware安装虚拟机并使用NAT模式连接网络

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

PHPStudy下Apache SSL证书安装教程

一、安装SSL证书的环境 Apache安装目录:E:phpStudyPHPTutorialApache 以上为windows下测试SSL证书安装的目录,具体目录请根据自己的实际环境! 二、获取SSL证书 成功在沃通申请SSL证书后,会得到一个压缩包文件,解压后得到四个文件&…

中国官方要求进一步加强中资商业银行境外机构合规管理

中新社北京1月22日电 (记者 王恩博)为推动在境外设有经营性机构的中资商业银行进一步优化集团合规管理体系,健全跨境合规管理机制,提高跨境合规管理有效性,实现境外机构安全稳健运行,中国银保监会22日发布《关于加强中资商业银行境…

详解:设计模式之-代理设计

分享一波:程序员赚外快-必看的巅峰干货 概念 通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理(类似于AOP)。 代理设计模式应用场景:AOP、权限控制、事务 常见代理的分类有&am…

【实时+排重】摆脱渠道统计刷量作弊行为

如今的渠道统计不仅要看精准度,更要看数据的真实性。 对App的推广业务而言,渠道监测和统计是必不可少的环节,不论以什么形式开展推广,终究都要具体落实到App的安装量、激活量等指标上。但在如今数据刷量和作假行为横行的背景下&am…

详解:设计模式之-单例设计模式

分享一波:程序员赚外快-必看的巅峰干货 前言 近期预计1-2周左右会更新设计模式专题文章。 单例设计模式:保证在一个JVM中,只能存在一个实例。 应用场景:Servlet,Spring IOC,线程池,连接池,S…

详解:设计模式之-适配器模式

分享一波:程序员赚外快-必看的巅峰干货 简介 在设计模式中,适配器模式有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 分类 …

excel 中编程:vba 入门

2019独角兽企业重金招聘Python工程师标准>>> 1. 打开编程环境: altF11 打开开发环境 注意需要启动宏,不然不能执行自定义的程序,保存后文件的后缀应该是:.xlsm 选择一个 sheet 或一个模块,右键查看代码&…

详解:设计模式之-策略设计模式

分享一波:程序员赚外快-必看的巅峰干货 什么是策略模式 定义一系列的算法,并将每一个算法单独进行封装,而且使它们可以相互替换,从而达到传递不同参数而执行不同算法的结果。 策略模式让算法独立于使用它的客户而独立变化 策略模式应用场…

mysql decode语句_MySQL复制问题的分析

s这是学习笔记的第 2031 篇文章最近有个业务的MySQL复制问题还是比较多,做了事务降维之后,把一些敏感操作和线上环境隔离起来,整体的效果好了许多,不过今天在外面的时候,又收到一条报警短信,让我心里咯噔一…