多线程基础(一)线程基础信息、synchronized 锁概念
1. 基本概念:
程序:
程序是一些保存在磁盘上的指令的有序集合,是静态的。程序包括:内存资源、IO资源、信号处理等。(如:XX.exe)
进程:
进程是程序执行的过程,包括了动态创建、调度和消亡的整个过程,进程是程序资源管理的最小单位。(当:XX.exe执行后,就会创建进程)
线程:
线程是操作操作系统能够进行运算调度的最小单位。线程被包含在进程之中,是进程中的实际运作单位,一个进程内可以包含多个线程,线程是资源调度的最小单位。
协程/纤程:
协程 Coroutines 是一种比线程更加轻量级的微线程。类比一个进程可以拥有多个线程,一个线程也可以拥有多个协程,因此协程又称微线程和纤程。
2. 线程的启动
public class theardTest {private static class T1 extends Thread{@Overridepublic void run(){for (int i=0;i<10;i++){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("T1");}}}public static void main(String[] args) {new T1().run();// new T1().start();for (int i=0;i<10;i++){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Main");}}}
使用 new T1().run(); 执行结果:
T1
Main
Main
Main
Main
Main
Main
Main
Main
Main
Main
结论:使用 new T1().run(); 方式执行启动线程,会先执行 T1 中的方法,然后再执行主程序 Main方法。
使用 new T1().start(); 方式执行后:
Main
T1
T1
Main
T1
Main
Main
T1
Main
T1
Main
结论:使用 new T1().start(); T1 线程会和主线程抢占资源执行。
面试题:启动(实现)线程的三种方式:
1. 继承 Thread类
2. 实现Runnable类3. 使用线程池。如: Executors.newCachedThreadPool();
3. 线程的基本方法
// 当前线程睡眠1000毫秒
Thread.sleep(1000);// 当前线程回到等待队列,重新竞争cpu资源
Thread.yield();// 当 T1线程执行完毕后,才开始执行当前线程
T1.join();
注意:T1.join() 方法 可以确保线程执行的顺序。
4. 线程状态
new 新建状态 ——>start 进入线程 ——>runnable 可执行状态 ——>cpu选中 running 执行状态 ——>blocked 等待状态 ——> terminated 结束状态。
注:一般我们不用stop是停止线程。而是使用 intertupted方法去判断当前线程是否已经中断,去清除状态。
5. synchronized 锁
JVM规范里并没有说明synchronized必须要怎么实现,它只要给一个对象加上锁,才可以去执行锁里的代码,锁的是对象,不是代码。并且,锁定的方法和非锁定的方法会同时执行,这个要注意脏读问题。
并且 synchronized 是可以保证可见性、原子性、有序性的。而 volatile不保证原子性。
synchronized 包括 monitor enter 获取监视器锁、monitor exi 释放监视器锁,这个重要JVM指令,java中每个对象都关联着一个监视器,当线程获取了某一对象的监视器锁,再次获取时,只增加对应的计数,不在重新执行一次获取过程。
这就是 synchronized 的可重入锁,比如:m1方法加了 synchronized ,在m1中调用m2,m2方法也是加了synchronized锁的,但是,m1可以正常调用m2方法。
即:一个同步方法可以调用另外一个同步方法,一个线程已经拥有某个对象的锁,(调用其他方法时)再次申请锁的时候,仍然会得到该对象的锁,只增加对应的计数,这就是获得的锁是可重入的。
synchronized的锁升级
markword 记录这个线程ID(偏向锁)
如果线程争用:升级为 自旋锁(轻量级锁)
10次以后,升级为重量级锁 - OS(向操作系统申请锁)
锁只能升不能降(锁膨胀)。执行时间短《加锁代码),线程数少,用自旋,执行时间长,线程数多,用系统锁
使用锁的注意事项
1. 程序在执行过程中,如果出现异常,默认情况锁会被释放所以,在并发处理的过程中,有异常要多加小心,不然可能会发生不一致的情况。比如,在一个web app处理过程中,多个servlet线程共同访网同一个资源,这时如果异常处理不合适在第一个线程中抛出异常,其他线程就会进入同步代码区,有可能会访问到异常产生时的数据。因此要非常小心前处理同步业务逻超中的异常.
2. synchronized(Object)不能使用String常量、Integer、Long类型等基础数据类型。
相关文章:
多线程基础(一)线程基础信息、synchronized 锁概念
1. 基本概念: 程序: 程序是一些保存在磁盘上的指令的有序集合,是静态的。程序包括:内存资源、IO资源、信号处理等。(如:XX.exe) 进程: 进程是程序执行的过程,包括了动态…...
JAVA期末考内容知识点的梳理
作者的话 前言:这些都是很基本的,还有很多没有写出来,重点在于考试复习,包括后四章的内容 前面内容请参考JAVA阶段考内容知识点的梳理 一、集合、流 课堂总结1集合 集合概念: 保存和盛装数据的容器,将许多…...
为什么要使用Thrift与Protocol Buffers?
编码数据的格式 程序通常(至少)使用两种形式的数据: 在内存中,数据保存在对象、结构体、列表、数组、散列表、树等中。 这些数据结构针对 CPU 的高效访问和操作进行了优化(通常使用指针)。如果要将数据写…...
oa是什么意思?oa系统哪个好用?
一、oa是什么意思 oa(Office Automation办公自动化)是一种将智能化科技应用于企业管理中的应用系统。它可以通过电脑网络、互联网等技术手段,将企业的各种业务流程、各种业务数据进行集成和处理,将各种业务流程和各种业务数据统一…...
Linq和C# Lambda表达式
什么是Linq 简介 Linq (Language Integrated Query) 是一种语言集成的查询技术,可以在C#和其他.NET语言中使用。Linq允许我们使用一种类SQL的语言来查询数据,这使得代码更加简洁和易于阅读。Linq提供了一种通用的查询接口,可以用于查询各种…...
蓝桥:前端开发笔面必刷题——Day2 数组(三)
文章目录 📋前言🎯两数之和 II📚题目内容✅解答 🎯移除元素📚题目内容✅解答 🎯有序数组的平方📚题目内容✅解答 🎯三数之和📚题目内容✅解答 📝最后 &#x…...
人工智能专栏第四讲——人工智能的未来展望与机遇
目录 一、人工智能的未来展望 二、人工智能在各领域的应用 三、人工智能的机遇 四、总结...
Unity阴影(Shadow)、Shadowmap
Unity阴影(Shadow) 在Unity中,阴影(Shadow)是用于模拟场景中物体之间相互遮挡和光照效果的特性。阴影可以增加场景的真实感,并在视觉上提供深度和空间感。 Unity提供了几种阴影投射和接收的方法和技术&am…...
编程语言的四种错误处理方法,你知道几种?
错误处理是编程的一个基本要素。除非你写的是“hello world”,否则就必须处理代码中的错误。在本文中,我将讨论各种编程语言在处理错误时使用的最常见的四种方法,并分析它们的优缺点。 关注不同设计方案的语法、代码可读性、演变过程、运行效…...
ContOS7单机安装Hadoop
安装Hadoop 1,准备环节 因为Hadoop是由java编写的,所以需要Java的环境支持,作为开发者我们需要安装jdk。 安装jdk的教程http://t.csdn.cn/6qJKg 下载Hadoop的安装包 Hadoop官网:http://hadoop.apache.org/ Hadoop版本下载地…...
抓取动态网页的数据的具体操作方法
抓取动态网页的数据的具体操作方法 动态网页是指在用户交互过程中,网页内容不断更新和变化的网页。抓取动态网页的数据需要了解以下具体操作方法: 使用浏览器开发者工具:在浏览器中打开目标网页后,按下F12键,打开开发…...
Windows 和 Linux 环境下 ProtoBuf 的安装
文章目录 一、ProtoBuf 在 Windows 环境中的安装二、ProtoBuf 在 Linux 环境中的安装 ProtoBuf在GitHub上的下载地址 一、ProtoBuf 在 Windows 环境中的安装 首先选择自己要下载的版本,我选择的是v21.11: 点进去在最下面选择Windows的版本࿰…...
商用密码应用安全性测评方案编制流程
密评方案编制的目标是完成测评准备活动中获取的信息系统相关资料整理,为现场测评活动提供最基本的文档和指导方案。 按照《GM-T 0116-2021 信息系统密码应用测评过程指南》标准,密评方案编制包括5项关键任务,简要汇总如下表。 编号任务输入文…...
Elasticsearch 集群部署插件管理及副本分片概念介绍
Elasticsearch 集群配置版本均为8以上 安装前准备 CPU 2C 内存4G或更多 操作系统: Ubuntu20.04,Ubuntu18.04,Rocky8.X,Centos 7.X 操作系统盘50G 主机名设置规则为nodeX.qingtong.org 生产环境建议准备单独的数据磁盘主机名 #各自服务器配置自己的主机名 hostnamectl set-ho…...
Liunx 套接字编程(2)TCP接口通信程序
1.TCP通信程序的编写 面向连接、可靠传输、提供字节流传输服务 客户端向服务器发送一个连接建立的请求流程,上图中服务端第三步详细流程 2.TCP接口 socket--创建套接字 int socket(int domain, int type, int protocol); bind---绑定 intbind(int sockfd, struct s…...
8年开发经验,浅谈 API 管理
随着信息化飞速增长的还有各信息系统中的应用接口(API),API作为信息系统内部及不同信息系统之间进行数据传输的渠道,其数量随着软件系统的不断庞大而呈指数型增长,如何管理这些API已经在业界变得越来越重要,…...
【软考备战·四月模考】希赛网四月模考软件设计师上午题
文章目录 一、成绩报告二、错题总结第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题第十三题第十四题第十五题第十六题第十七题第十八题第十九题第二十题第二十一题第二十二题 三、知识查缺 题目及解析来源:2023上半年软考-模考大赛…...
MySQL中的@i:=@i+1用法详解
在MySQL中,i:i1是一个非常有用的表达式,用于在查询中生成一个递增的序列号。它可以帮助我们对结果进行编号,或者在需要连续的数字序列时提供便利。 我们先来了解一下MySQL中的用户变量。用户变量是一个用户定义的变量,其以开头。…...
web安全第一天 ,域名,dns
第一天 什么是域名?域名就是网络地址 在hhtp之后的就是域名 域名在哪里注册呢 国内注册商有很多,在网络上搜索一下阿里云万网就可以注册 什么是二级域名和多级域名 域名通常都是www.开头 ,而www.被称为顶级域名,在搜索的时候…...
【Linux】Linux编辑神器vim的使用
目录 一、Vim的基本概念 二、Vim的基本操作 1、进入vim 2、正常模式切换至插入模式 3、插入模式切换至正常模式 4、正常模式切换至底行模式 5、退出Vim编辑器 三、Vim正常模式命令集 1、移动光标 2、删除文字 3、复制 4、替换 5、撤销 四、Vim底行模式命令集 1、列出行号 2、光…...
cereal与Boost序列化对比:终极迁移指南和性能基准测试
cereal与Boost序列化对比:终极迁移指南和性能基准测试 【免费下载链接】cereal A C11 library for serialization 项目地址: https://gitcode.com/gh_mirrors/ce/cereal 在C开发中,序列化是数据持久化和跨系统通信的关键技术。cereal作为一款轻量…...
芝麻粒-TK:蚂蚁森林自动化能量收取终极指南
芝麻粒-TK:蚂蚁森林自动化能量收取终极指南 【免费下载链接】Sesame-TK 芝你麻咸鱼的粒-TK 项目地址: https://gitcode.com/gh_mirrors/ses/Sesame-TK 芝麻粒-TK(Sesame-TK)是一款专为蚂蚁森林用户打造的自动化能量收取工具࿰…...
从Ingress到Rancher面板:一次搞定K8s服务暴露与多集群管理平台部署
Kubernetes服务暴露与多集群管理实战:从Ingress到Rancher全链路部署 当企业级容器化应用规模扩大时,如何安全高效地暴露服务并实现多集群统一管理成为技术团队面临的核心挑战。本文将带您深入探索从Ingress控制器配置到Rancher管理平台部署的完整技术链路…...
APM固件编译进阶:如何为你的Pixhawk飞控定制和编译稳定版固件(Copter-4.4.0)
APM固件编译进阶:如何为你的Pixhawk飞控定制和编译稳定版固件(Copter-4.4.0) 当你需要为特定飞行任务定制固件时,直接使用master分支的开发版固件往往不是最佳选择。本文将带你深入APM固件编译的进阶领域,专注于如何为…...
万象视界灵坛惊艳效果展示:浅蓝格点UI+8px硬边投影下的实时语义可视化
万象视界灵坛惊艳效果展示:浅蓝格点UI8px硬边投影下的实时语义可视化 1. 视觉革命:当AI遇见像素艺术 万象视界灵坛彻底颠覆了传统AI视觉工具的刻板印象,将复杂的语义分析过程转化为一场视觉盛宴。这款基于OpenAI CLIP技术的多模态平台&…...
Java对接腾讯云KMS:FISCO BCOS联盟链私钥托管的完整实战指南
一、引言 在FISCO BCOS联盟链的企业级应用中,私钥安全始终是生产环境绕不开的核心问题。FISCO BCOS作为国产开源联盟链平台,其Java SDK在为区块链应用开发者提供便捷API的同时,也带来了一个关键问题:私钥如何安全存储与使用? 用于交易签名的私钥由业务模块负责安全加载(…...
SleeperX:Mac智能睡眠控制终极方案,告别合盖中断烦恼
SleeperX:Mac智能睡眠控制终极方案,告别合盖中断烦恼 【免费下载链接】SleeperX MacBook prevent idle/lid sleep! Hackintosh sleep on low battery capacity. 项目地址: https://gitcode.com/gh_mirrors/sl/SleeperX 在Mac使用中,你…...
DeepChat技术亮点:锁定ollama-python客户端版本解决API不兼容问题
DeepChat技术亮点:锁定ollama-python客户端版本解决API不兼容问题 1. 项目概述 DeepChat是一个基于本地化部署的深度对话引擎,它集成了业界领先的Ollama大模型运行框架,并默认搭载了Meta AI强大的llama3:8b模型。这个解决方案从零开始构建了…...
微信社交关系真相揭秘:WechatRealFriends双向好友验证工具全面解析
微信社交关系真相揭秘:WechatRealFriends双向好友验证工具全面解析 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRea…...
探索数据中的数学之美:PySR符号回归工具让复杂规律触手可及
探索数据中的数学之美:PySR符号回归工具让复杂规律触手可及 【免费下载链接】PySR High-Performance Symbolic Regression in Python and Julia 项目地址: https://gitcode.com/gh_mirrors/py/PySR 你是否曾面对海量数据却难以理解其中的内在规律?…...
