Java并发编程学习笔记(一)线程的入门与创建

一、进程与线程

认识

  • 程序由指令和数据组成,简单来说,进程可以视为程序的一个实例
    • 大部分程序可以同时运行多个实例进程,例如记事本、画图、浏览器等
    • 少部分程序只能同时运行一个实例进程,例如QQ音乐、网易云音乐等
  • 一个进程可以分为多个线程,线程为最小调度单位,进程则是作为资源分配的最小单位
    • 在Windows中进程是不活动的,只是作为线程的容器

对比

  • 进程之间基本相互独立,而线程存在于进程内,是进程的一个子集
  • 进程拥有的资源供其内部的线程共享
  • 进程间通信较为复杂
    • 同一台计算机的进程通信称为IPC
    • 不同计算机之间的进程通信需要通过网络,遵守共同的协议,例如HTTP
  • 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低

二、概念总览

并行与并发

  • 同一时刻同时发生,即为并行
  • 同一时段同时发生,即为并发

同步与异步

  • 需要等待结果返回,才能继续运行就是同步
  • 不需要等待结果返回,自顾自地运行就是异步

三、创建和运行线程

  • 方法一:直接使用Thread
	@Testpublic void test1(){//创建一个新线程Thread thread1=new Thread("t1"){//设置线程的具体任务public void run(){log.info("success");}};//启动线程thread1.start();log.info("error");}
  • 方法二:使用Runnable配合Thread

用这种方式将线程Thread和任务Runnable分开,更容易组件化操作

	@Testpublic void test2(){Runnable runnable=new Runnable() {@Overridepublic void run() {log.info("success");}};//创建新线程并命名Thread thread2=new Thread(runnable,"t2");thread2.start();log.info("error");}
  • 方法三:使用FutureTask配合Thread
	@Testpublic void test4() throws ExecutionException, InterruptedException {FutureTask<Integer> futureTask=new FutureTask<>(new Callable<Integer>() {//使用Callable还有一个好处就是能够返回值,而Runnable不行@Overridepublic Integer call() throws Exception {log.info("success");Thread.sleep(1000);return 100;}});Thread thread4=new Thread(futureTask,"t4");thread4.start();//捕获到线程执行完成并获取返回值进行后续处理Integer result=futureTask.get();log.info("error:{}",result);}

四、查看进程线程的方法

Windows

  • 可以通过任务管理器来看
  • tasklist:查看进程
  • taskkill:杀死进程

Linux

  • ps -ef 查看所有进程
  • ps -ef | grep java :查询带Java的进程
  • kill 杀死进程,kill -9 强制杀死进程
  • top 进程排名

Java

  • jps:查看所有Java进程
  • jconsole:查看某个Java进程中线程的运行情况(图形界面),具体操作步骤如下
    在这里插入图片描述

五、线程运行的原理

栈与栈帧

  • 每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
    在这里插入图片描述

上下文切换

  • 由一个线程切换到另一个线程即上下文切换,通俗来说,也就是要把线程运行的环境换一下,换成线程之前运行时的环境
  • 专业一点就是,每次线程切换时,操作系统会保存当前线程的状态,并恢复另一个线程的状态
  • 状态包括程序计数器、栈帧中的信息,如局部变量、操作数栈、返回地址等

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

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

相关文章

【C++进阶之路】适配器、反向迭代器、仿函数

文章目录 前言一、适配器①模拟实现栈②模拟实现对列 二、反向迭代器三、仿函数总结 前言 我们先来笼统的介绍一下今天的三个内容。 适配器——简单的理解就是复用&#xff0c;用已经实现的轮子&#xff0c;来继续实现某种功能。 反向迭代器——原理很简单&#xff0c;就是对…

笔记:NodeJS electron 打包时 ETIMEDOUT

第一个方法 如果是用 npm&#xff0c;在你的 cmd 中输入 npm config set ELECTRON_MIRROR https://npmmirror.com/mirrors/electron/如果用 yarn&#xff0c;就输入 yarn config set electron_mirror https://npmmirror.com/mirrors/electron/第二个方法 如果第一个方法不行…

摄影测量-共线方程、共面方程

1、共线方程 在摄影测量中&#xff0c;绝大多数的结算方法都是基于共线条件方程式的&#xff0c;如单片空间后方交会解法、像对空间前方交会解法、光束法区域网评查以及直接线性变换等。 2、共面方程 描述像片对内摄影基线以及同名光线位于同一平面的一种条件方程。在摄影测量…

深入探究 SOCKS5 代理:加强网络安全与高效爬虫的利器

一、 SOCKS5 协议简介 SOCKS5&#xff08;Socket Secure 5&#xff09;是 SOCKS 协议的最新版本&#xff0c;它允许客户端向代理服务器发送请求&#xff0c;并将数据传输到目标服务器。相比于旧版 SOCKS 协议&#xff0c;SOCKS5 提供了更强大的身份验证机制和数据加密功能&…

分表后mybatis-plus删除操作失效等问题处理

因为重构dao层&#xff0c;问题太多了&#xff0c;于是想着另起一个章节。 4 count的问题 使用count复用&#xff0c;不需要查询所有字段&#xff0c;否则会出现下面的错误 ### SQL: SELECT COUNT( t.id,t.company_id,t.user_id,t.bind_time,t.role_type,t.job_type,t.studen…

openSUSE leap 15.3安装mysql-community-server

openSUSE Software 下载"https://software.opensuse.org/ymp/home:bjoernv/15.3/mysql-community-server.ymp" wget "https://software.opensuse.org/ymp/home:bjoernv/15.3/mysql-community-server.ymp" 双击"mysql-community-server.ymp" 添…

【算法基础:搜索与图论】3.2 树与图的dfs和bfs

文章目录 例题846. 树的重心&#xff08;深度优先遍历 / 树形DP&#xff09;⭐⭐⭐⭐⭐&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;&#xff08;重要&#xff01;好题&#xff01;&#xff09;847. 图中点的层次 相关链接 要学会建树、建图的通用方法。…

s390x 架构docker安装mysql

由于 MySQL 官方未提供 s390x 架构镜像&#xff0c;所以在应用商店启用 MySQL 前&#xff0c;需要手动修改 MySQL 镜像版本 MySQL 5.7 下载 s390x 架构最新版本镜像 docker pull ibmcom/mysql-s390x:5.7.34将镜像重命名为 1Panel 应用商店中使用的 MySQL 版本 docker tag i…

逻辑回归概述

逻辑回归介绍 1. 逻辑回归的应用场景 逻辑回归(Logistic Regression)是机器学习中的 一种分类模型 ,逻辑回归是一种分类算法,虽然名字中带有回归。由于算法的简单和高效,在实际中应用非常广泛 广告点击率是否为垃圾邮件是否患病信用卡账单是否会违约 逻辑回归就是解决二…

【Matlab】基于遗传算法优化 BP 神经网络的数据回归预测(Excel可直接替换数据)

【Matlab】基于遗传算法优化 BP 神经网络的数据回归预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理2.文件结构3.Excel数据4.分块代码4.1 arithXover.m4.2 delta.m4.3 ga.m4.4 gabpEval.m4.5 initializega.m4.6 maxGenTerm.m4.7 nonUnifMutation.m4.8 normGeomSel…

org.springframework.web.client.RestTemplate 的使用

目录 前言使用配置具体使用 前言 后端难免会发送请求&#xff0c;大致分为两种请求&#xff1a;微服务之间的内部请求和系统之间的外部请求&#xff0c;org.springframework.web.client.RestTemplate对这两种请求都支持。 使用 配置 import org.springframework.cloud.clie…

为harbor仓库添加https,新增DigiCert 免费版SSL证书

完成效果&#xff1a; 前言&#xff1a;在本地搭建好docker的镜像仓库harbor后&#xff0c;当我们登录docker login时&#xff0c;会提示证书问题x509: cannot validate certificate 登录本地报错X509 无法登录仓库也无法上传和拉取镜像&#xff0c;虽然有本机的解决方法&…

300M的联通宽带,电脑直接连接光猫只有100M;电脑连接路由器,然后路由器连接光猫却有300M???

1. 现象 300M的联通宽带&#xff0c;用了小半年之后发现网络比以前满&#xff0c;通过https://www.speedtest.cn网站测试发现只有100M 2. 猜测 难道是联通这帮人&#xff0c;偷偷把我网速降到了100M&#xff1f;&#xff1f;&#xff1f; 3. 排查过程 打电话让联通师傅上门排查…

Windows下YUICompress实现js、css混淆压缩

首先&#xff0c;我们针对Linux下的部分命令进行Windows系统的对应实现 ls————cmd /c dir/b rm————cmd /c del mv————cmd /c move pwd————cmd /c chdir 注&#xff1a;cmd /c是执行完命令后关闭命令行窗口、cmd /k是执行完命令后不关闭命令行窗口、cmd /c sta…

归并排序与计数排序

目录 一、归并排序 1.基本思想 2.归并排序的特性总结&#xff1a; 3.代码实现&#xff1a; 4.代码优化 &#xff1a; 二、计数排序&#xff08;非比较排序&#xff09; 1. 概念&#xff1a; 2.计数排序的特性总结&#xff1a; 3.代码实现&#xff1a; 一、归并排序 1.…

香农极限是如何影响光纤容量的

1 引言 上世纪末&#xff0c;DWDM技术开始在干线通信中使用并迅速普及。虽然当时DWDM系统的容量只有402.5G&#xff0c;但实验室中DWDM支持的波道数甚至超过了1000波&#xff0c;单波道速率也飙到了惊人的160G&#xff08;超1000波和单波160G是两个独立事件&#xff09;。人们普…

自定义类型:结构体进阶学习分享

自定义类型&#xff1a;结构体进阶学习分享 前言1 结构体的基础知识2 结构的声明3 特殊声明4 结构的自引用5 结构体变量的定义和初始化6 结构体内存对齐6.1 计算结构体大小相关笔试题&#xff08;基于VS&#xff09;笔试题一&#xff1a;笔试题二&#xff1a; 6.2 为什么存在内…

使用Kafka Streams开发流处理应用

使用Kafka Streams开发流处理应用 一、简介1.1 Kafka Streams定义1.2 Kafka Streams的优势1.3 Kafka Streams应用场景 二、环境搭建2.1 安装Kafka2.2 安装Kafka Streams2.3 构建Kafka集群 三、Kafka Streams编程API介绍3.1 Kafka Streams主要API3.2 应用程序的配置和参数3.3 To…

FFmpeg 命令行实现居中高清上下模糊播放效果

FFmpeg 命令行实现居中高清上下模糊播放效果。 1、16:9 的横屏原视频&#xff0c;以 16:9 竖屏上下模糊播放 以该效果播放视频的命令如下&#xff1a; ffplay -i horizontal_test_video_169.mp4 -vf \ "split[a][b]; \ [a]crop(ih/16*9):ih,scaleiw/10:-1,gblursigma5…

分布式 - 负载均衡Nginx:Nginx常见问题总结(一)

文章目录 01. 什么是Nginx&#xff1f;02. 为什么要用Nginx?03. 为什么Nginx性能这么高&#xff1f;04. Nginx 为什么不使用多线程&#xff1f;05. Nginx 请求处理流程是什么&#xff1f;06. Nginx怎么处理请求的&#xff1f;07. 什么是正向代理和反向代理&#xff1f;08. 反向…