多线程的基础知识

1、程序、进程、线程的基本概念

程序:为了完成某种任务用某一种语言编写的一组指令的集合就叫程序。程序就是一段静态的代码。

进程:进程是程序的依次执行过程,或者说是正在运行的一个程序。这是一个动态的过程,有它自身的产生运行和消亡的过程--生命周期。进程是资源分配的基本单位。

线程:进程可进一步的划分为线程,线程是一个程序内部的一条执行路径。线程是调度和执行的基本单位,每一个线程拥有独立的程序计数器和运行栈,线程之间切换的开销相对来说比较小。

备注:一个Java程序至少有三个线程:main()线程、垃圾收集线程、异常处理线程。

2、并发和并行的基本概念

并行:多个CPU同时执行多个任务。

并发:一个CPU同时执行多个任务。

3、多线程程序的优点

  • 提高应用程序的响应时间
  • 提高计算机系统CPU的利用效率
  • 改善程序结构。

4、线程的分类

Java中的线程分为用户线程和守护线程。

  • 他们两者在几乎每个方面都是相同的,唯一的区别就是判断JVM何时离开
  • 守护线程是用来服务用户线程的,但是也可以把一个用户线程更改为守护线程
  • Java垃圾回收线程就是一个典型的守护线程
  • 如果JVM中的线程全部是守护线程的时候,JVM将会退出

5、线程创建的四种方式

  • 使用继承Thread类的方式创建多线程
  • 使用实现Runnable接口的方式创建多线程
  • 使用实现Callable接口的方式创建多线程
  • 使用线程池的方式创建多线程

6、线程的生命周期

一个线程完整的生命周期通常包含五个部分:

  • 新建状态:当一个Thread类及其子类的对象被声明并创建时,新生的线程就处于新建状态
  • 就绪状态:新建的线程执行start()方法之后,将会进入线程队列等待CPU时间片,此时的线程已经具备了执行的条件,只是没有分配到CPU
  • 运行状态:处于就绪状态的线程被调度并且获得了CPU时间片之后,就能执行状态
  • 阻塞状态:在某种情况下,当前的线程让出CPU并临时中断自己的执行,此时的线程就进入了阻塞状态
  • 死亡状态:线程完成了全部的工作或者被强制提前结束或者线程出现异常导致线程结束

7、什么是线程的安全问题

  多线程安全问题,是由于多个线程在访问共享的数据(共享的资源),并且操作共享数据的语句不止一条。那么这样在操作多条共享数据的线程之间就可能发生线程切换。只要切换就可能有安全问题。

  当多个线程执行解决某个方法时,不管这些线程如何交替的执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类时线程安全的。

转载于:https://www.cnblogs.com/BaoZiY/p/10726400.html

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

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

相关文章

springboot实现单点登录_什么是单点登录,php是如何实现单点登录的

文章来自:php中文网链接:https://www.php.cn/php-weizijiaocheng-429869.html作者:中文网商务合作:请加微信(QQ):2230304070视频教程分享码农网:http://www.mano100.cn/rjyfk_url-url.html ,升级终身会员即…

背景图处理,这是个好东西记录一下

背景图处理 rgba (),前3个是三原色,第四个参数是透明度转载于:https://www.cnblogs.com/ChineseLiao/p/7479207.html

python使用GUI(图形用户界面)

打开后: File→New File(Ctrl N) 转载于:https://www.cnblogs.com/ly123456/p/6269859.html

Altium Designer(AD24)新工程复用设计文件图文教程及视频演示

🏡《专栏目录》 目录 1,概述2,复用方法一视频演示2.1,创建工程2.2,复用设计文件 3,复用方法二视频演示4,总结 欢迎点击浏览更多高清视频演示 1,概述 本文简述使用AD软件复用设计文件…

Oracle 学习笔记(三)

oracle 表查询 oracle 表基本查询 在此,基于 scott 用户存在的 emp,dept 表演示学习。 emp 雇员表 clerk 员工 salesman 销售 manager 经理 analyst 分析师 president 总裁 mgr 上级的编号 hiredate 入职时间 sal 工资 comm 奖金 deptno 部…

html meta标签使用总结(转)

之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8"> 但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方。 简介 在查…

redhat6 删除mysql_Red Hat enterprise linux 6卸载默认安装的 mysql

因为Red Hat enterprise linux 6 自带了一个mysql&#xff0c;所以当你安装新的mysql时&#xff0c;就会提示错误如&#xff1a;error&#xff1a;Failed dependencies&#xff1a;MySQL conflicts with mysql-5.1.47-4.el6.i686rmp -qa mysql 可以看到安装的mysql于是将自带的…

Jenkins持续集成实践之java项目自动化部署

关于Linux安装Jenkins可以参考我的这篇博文Ubuntu16.04环境安装jenkins 1.安装部署插件 进入插件管理&#xff0c;并搜索该插件Deploy to container Plugin进行安装 &#xff0c;下载地址为&#xff1a;https://wiki.jenkins-ci.org/display/JENKINS/DeployPlugin 2.安装完后&a…

Java 多线程 笔记 转自http://www.cnblogs.com/lwbqqyumidi/p/3804883.html

多线程作为Java中很重要的一个知识点&#xff0c; 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期&#xff0c;首先看一下下面这张较为经典的图&#xff1a; 上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点&#xff0c;Java中的多线程也就基…

c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)...

我的安装环境&#xff1a; (1)vs2013(32位版) (vs2013只有32位的 没有64位的&#xff0c;但是它可以编译出64位的程序) &#xff1b; (2)mysql-5.7.15(64位) vs2013中的设置&#xff08;按步骤来&#xff0c;顺序不要乱&#xff09; (1)首先在vs2013中新建一个控制台程序 Mysq…

调用接口返回500_公交卡余额查询接口开放使用啦!

API说明本API返回数据仅支持JSON格式且会对中文进 行unicode 编码&#xff0c;JSON格式返回数据基本格式如下&#xff1a;{"errCode": 0,"errMsg": "OK","data": {}}其中 errCode 表示请求状态&#xff0c;0表示请求成功&#xff0c; …

stark组件开发之组合搜索基本显示

数据的获取&#xff0c;上一篇&#xff0c;已经有了&#xff01;然后就是&#xff0c;如何进行展示的问题。到了展示这里&#xff0c;又有了新的问题&#xff0c; 因为从数据库&#xff0c;取得的数据。 分为 queryset 和 tuple 两种数据结构。tuple 中&#xff0c;只是字符串。…

原生支付url参数错误_小程序支付

下载微信JSAPI支付的 SDK : https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php.zip &#xff1b;解压后放在extend 文件夹下&#xff0c;命名为wepay下载你的商户证书&#xff0c;放在extend/wepay/cert/ 文件夹下面。自行将 extend/wepay/example/WxPay.Config.p…

枚举转中文,通过反射方法与描述的方式获取

示例&#xff1a; 有人为了显示中文&#xff0c;这样定义枚举吗&#xff1f; publicenum TimeOfDay { 上午, 下午, 晚上 }; 这样定义&#xff0c;很别扭&#xff0c;特别是在使用的时候&#xff0c; 比如&#xff0c;this.Time TimeOfDay.上午; 而…

Powershell-创建Module

1.找到默认module路径&#xff0c;ISE启动时自动加载默认领下的Module代码。 $env:PSModulePath 2.在其中一个默认路径下创建个文件夹&#xff0c;在文件夹下创建一个.psm1后缀文件&#xff0c;注意文件夹名字与文件名一样。 3.在.psm1文件中写入函数代码。 4.重启ISE自动加载m…

preserve log什么意思_一些有意思的JavaScript代码片段

Javascript是一门很灵活的语言&#xff0c;我们可以使用它动态地实现各种各样的功能。但是动态带来便利的同时&#xff0c;也存在一些令人费解的行为&#xff0c;稍不注意就会进入误区一个接着一个的坑。虽然我使用JavaScript的时间还不算长&#xff0c;也是遇到了一些有意思的…

冲刺第一天

任务板 未开始 进行中已完成 刘晓杰&#xff1a;找回密码界面 页面风格优化 刘晓杰&#xff1a;滑动欢迎界面/加载界面 预计时间&#xff1a;5.5h 冯晨&#xff1a;找回密码功能 发布动态界面 冯晨&#xff…

苹果内存取证工具volafox

2019独角兽企业重金招聘Python工程师标准>>> 苹果内存取证工具volafox volafox是一款针对苹果内存取证的专用工具。该工具使用Python语言编写。该工具内置了overlay data数据&#xff0c;用户可以直接分析苹果10.6-10.11的各种内存镜像文件。该工具提供28个子命令&a…

Flutter实战视频-移动电商-45.详细页_说明区域UI编写

45.详细页_说明区域UI编写 pages/details_page/details_expain.dart 详情页面引用组件 效果展示&#xff1a; 最终代码&#xff1a; import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart;class DetailsExplain extends Stateles…

win10java怎么运行_win10系统电脑怎样才可以运行Java开发

展开全部安装jdk&#xff0c;jdk下载地址&#xff1a;网页链接 根据电脑系统选择对应版本。32/64安装时候&#xff0c;安装路径可以默认&#xff0c;也可以自己指定。我个人喜欢安装到非系统盘&#xff0c;比如D盘。jdk安装后&#xff0c;会弹出jre安装界面&#xff0c;路径同样…