什么是线程?以及线程的总结。(十小点1700字)

2023-11-01

(1)什么是程序,进程和线程?

 (2)创建线程的三种方式?

(3) 继承Thread类来创建线程和实现Runable接口创建线程的区别?

 (4)线程的方法(线程的优先级别)​编辑

(5)线程的状态以及图解

(6)多线程的概念 ,优点,缺点

(7)线程同步的概念 

​编辑 (8)关键字synchronized和接口lock

 (9)线程死锁

(10)线程通信

(1)什么是程序,进程和线程?

        (i)程序可以大概理解为电脑安装的文件,比如说英雄联盟啊之类的。

          (ii)  进程运行时候的程序,是操作系统分配的最小内存单位,一个进程可以启动多个线程。

        (iii)线程是进程中的一部分,cpu的最小执行单位。

 (2)创建线程的三种方式?

        (i)继承Thread类

        (ii)实现Runable接口

        (iii)实现Callable接口

(3) 继承Thread类来创建线程和实现Runable接口创建线程的区别?

(1)继承Thread类创建线程的方式本质上就是创建了一个线程对象。可以直接new一个然后start。

(2)实现Runable创建线程的方式,实际上是创建了一个线程任务,不是一个线程,还需要再new一个线程,记得要把线程的任务扔进去,这也就意味着创建的线程们都拥有同一个线程任务,共享同一份资源,非常适合多线程处理相同的资源。

public class MainTest {
    public static void main(String[] args) {
        //创建线程事件
        SaveThread saveThread = new SaveThread();
        //创建两个相同事件的线程
        Thread a = new Thread(saveThread);
        Thread b = new Thread(saveThread);
        a.start();
        b.start();

    }
}

 (4)线程的方法(线程的优先级别)

 (1)线程的优先级别不是绝对的,不一定对线程的优先级别越高就一定对cpu的抢占权越高

          线程的优先级别默认是5,最高是10,最低是1.。

 (2)如果在主线程中先设置线程优先级别为8,那么主线程的剩下所有子线程的优先级别都是8,而不是默认值5。

 (3)Unix系统使用的是时间片算法,而Windows则属于抢占式的。

(5)线程的状态以及图解

        (1)新建:当一个线程被new出来的时候,新生的线程对象属于新建状态

        (2)就绪:当一个线程被start的时候,会进入线程队列等待。

        (3)运行:当已经就绪的线程被调度获取cpu资源的时候会进入运行状态,run方法定义了线程的功能

        (4)阻塞:线程被认为挂起,或者线程内部有执行输入或者输出的方法的时候线程会阻塞。

        (5)死亡:线程完成工作或者被强制性终止就会死亡

 

(6)多线程的概念 ,优点,缺点

(概念) 在一个程序中可以同时运行多个不同的线程来执行任务,意思就是允许单个程序创建多个并行线程来完成各自的任务

(优点)提高程序的响应,提高cpu的利用率,改善程序结构,将复杂的任务分为多个线程来执行。

(缺点)线程越多占用内存越多,线程之间共享资源会相互影响。意思就是多个线程再对用一资源同时进行操作的时候,会出现严重的错误。

(7)线程同步的概念 

多个线程同时访问同一个资源的时候,可能会引起冲突 ,为了避免这种情况的发生,我们需要给线程加锁

 (8)关键字synchronized和接口lock

 (1)synchronized是关键字,可以用来修饰同步代码块或者方法,该执行原理是再jvm层面上,但是lock是一个类,通过方法来对锁来进行控制

(2)synchronized在遇到异常的时候会隐式释放锁,安全性比较高,lock遇到异常的时候不会自动释放锁,所以要在finally里面实现unlock主动释放锁。从此避免线程死锁。

(3)在面对大量数据的时候,lock的性能更加优越。

 (9)线程死锁

不同的线程分别占用对方需要的同步资源,都在等待对方放弃自己需要的同步资源,就会形成线程死锁

(10)线程通信

(1).wait一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。

(2).notify一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。.

(3)notifyAll一旦执行此方法,就会唤醒所有被wait的线程。

注意:.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是线程?以及线程的总结。(十小点1700字) 的相关文章

随机推荐

  • k8s dashboard安装

    安装 wget https raw githubusercontent com kubernetes dashboard v2 5 1 aio deploy recommended yaml kubectl apply f recommen
  • springboot集成log4j2

    一 前言 1 为什么要使用log4j2作为我们的日志记录管理框架呢 答 springboot默认使用logback作为日志记录框架 常见的日志记录框架有log4j logback log4j2 2 我们在项目中经常使用一个叫SLF4J的依赖
  • 十分钟学会写shell脚本

    大家好 我是handsomecui 下面我为大家讲解一下shell脚本的写法 讲的不好的地方 欢迎大家留言拍砖 1 在linux下会写shell脚本是非常重要的 下面我参照例子给大家展示几个脚本 顺带这学习shell 的语法 什么时候hel
  • 汇编语言(1)——从机器到汇编

    汇编语言 王爽 著 读书笔记 1 汇编语言的出现 最早期出现的计算机 是名副其实的 计算 机 这个机器可以执行一系列特定的指令 即机器指令 而由机器指令构成的集合被称为指令集 也就是我们说的机器语言 机器指令是由一系列的二进制数字0和1构成
  • EMC整改流程及常见问题

    电磁兼容EMC整改专题 目录 EMC整改流程及常见问题 1EMC整改意见 2EMC整改流程 3EMC整改的一些小建议 4总结 电磁兼容 EMC EMC小结之时钟辐射问题 一前言 二测试数据分析 三辐射超标的原因 四结语 EMC整改流程及常见
  • 人机交互期末复习要点

    文章pdf下载 点击下载pdf 注 我们网上的作业 老师说的考试题目 可能会考的重点 无 可能会考选择题 也可能会考大题 比如 人机交互设备 我们这次期末考试就考了 绪论 什么是人机交互技术 是指关于设计 评价和实现供人们使用的交互式计算机
  • matlab中float类型的_数据类型(一)——数值类型

    数值类型包括两种 整数类型和浮点数类型 整数类型 uint8 分别表示有 不带u 无 带u 符号和对应的数值范围 或者说是整数的位数 浮点数类型 单精度 single 和双精度 float 或者直接输入小数 因为matlab默认即为双精度
  • ARM定义特殊寄存器(*(volatile unsigned long *))的理解

    以前老是对ARM程序中 volatile unsigned long 不理解 今天看了两篇文章 觉得对理解这个很有用 当然这个不止在定义内部特殊寄存器有用 在用到外部总线时 根据具体情况 定义外部器件的地址也可以用 下面是文章一 终于理解了
  • 常用IDE正则表达式

    目录 1 notepad 正则表达式 2 VScode正则表达式 3 pycharm正则表达式 梳理常用工具的正则表达式使用 逐步增加其他工具 1 notepad 正则表达式 注意 Notepad 正则表达式字符串最长不能超过69个字符 转
  • Unity做MMD(一)资源处理

    文章目录 unity插件 Blender插件 两者对比 要想把mmd 的模型拿到unity中处理 主要有两个方法 第一个是通过unity的插件将pmx模型文件转化为fbx 第二个就是通过第三方软件将pmx处理 例如blender 如果是想把
  • acwing算法基础__提高__进阶_课

    文章目录 1 排序 1 1 快速排序 分治 1 2 归并排序 分治 2 二分 2 2 整数二分 2 3 小数二分 浮点数二分 3 高精度 4 前缀和与差分 5 双指针算法 6 位运算 7 离散化 8 区间合并 总结 要求 把算法的思想搞懂
  • Mybatis中ResultType和ResultMap的区别

    MyBatis中的ResultType和ResultMap都是用来映射查询结果到Java对象的 ResultType适合简单查询结果的映射 而ResultMap适合复杂查询结果及自定义映射关系的情况 ResultType指定了返回值类型 即
  • 【Unity2D】相机移动以及设置相机边界

    添加相机 添加相机时 首先需要在unity中添加 Cinemachine 包 第一次使用这个包时 需要在Package Manager中搜索并安装 安装Camera Mechine包后 添加2D Camera 设置跟随对象为Ruby 从Hi
  • 在线一键JS混淆还原

    当今 随着互联网的发展 越来越多的网站开始使用JavaScript来实现动态交互和用户体验 但是 由于JavaScript代码的开放性和易于复制 网站管理员需要采取一些措施来保护他们的代码 这就是JavaScript混淆工具产生的原因 js
  • 【经验-强制HTTPS-web】在服务器301强制HTTPS跳转,套上腾讯云CDN后,第一次访问发生不强制跳转HTTPS的问题解决方法

    我的个人站网址 https mdzz pro 今天偶然在编程群里展示了下个人站 没想到大佬居然说我的网站没有开Https 我当场懵逼了 不可能啊 面板上我开了强制Https啊 于是我自己用edge访问了一下 结果发现真是这样 第一次 第二次
  • vim常用设置---(.vimrc详细配置)

    vimrc配置文件内容如下 一般设定 设定默认解码 set fenc utf 8 set fencs utf 8 usc bom euc jp gb18030 gbk gb2312 cp936 不要使用vi的键盘模式 而是vim自己的 se
  • 设计模式--外观模式

    外观模式 属于结构型模式 基本原理 隐藏系统复杂性 为系统开放一个便于使用的接口 主要流程 1 创建系统和子系统 2 创建一个外观类 统一管理子系统的功能 并对外提供接口 注意 外观类是管理子系统和对外提供接口 include
  • 数据库DDL,DML

    数据库DDL DML 一 DDL操作数据库 查询数据库 SHOW DATABASE 创建数据库 创建 CREATE DATABASE 数据库名称 创建 判断 如果不存在则创建 CREATE DATABASE IF NOT EXISTS 数据
  • Cesium加载矢量数据探索——从geojson到矢量切片

    矢量数据由于包含确定的坐标信息 通常用于表达准确的空间位置实体 在cesium中 不支持对shp进行加载 而是需要对shp数据进行转换 一般cesium支持的shp格式如下 geojson topojson kml czml 通常来说 对于
  • 什么是线程?以及线程的总结。(十小点1700字)

    1 什么是程序 进程和线程 2 创建线程的三种方式 3 继承Thread类来创建线程和实现Runable接口创建线程的区别 4 线程的方法 线程的优先级别 编辑 5 线程的状态以及图解 6 多线程的概念 优点 缺点 7 线程同步的概念 编辑