一篇关于线程并发的简单案例

CPU核心数线程数、程序进程线程、并发并行的简单理解 CPU核心数线程数、程序进程线程、并发并行、简单理解和区分 这篇文章是对上述感念的简单理解,想深入研究可以看看《计算机组成原理》 CPU的核心数 线程数 当我们买电脑的时候,会看到CPU的核心数和线程数,比如4核4线程(几乎没有),4核8线程,8核16线程等。最新的AMD线程撕裂者甚至有64核128线程,那么这里的64和128具体指的什么呢? 这里以 联想R7000 P 8核16 线程为例 核心数(物理概念) 8核:有8个相对独立的CPU核心单元组,这是物理概念,也就是说1个CPU有 8个独立的小CPU,物 阅读详情

之前对线程并发的理解不够深刻,写一个简单案例体会一下

如题

/**
 * sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,
 * 给执行机会给其他线程,但是监控 状态依然保持,到时后会自动恢复。
 * 调用 sleep 不会释放对象锁。wait 是 Object 类的方法,对此对象
 * 调用 wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,
 * 只有针对此对象发出 notify 方法(或 notifyAll)后本线程才进入对
 * 象锁定池准备获得对 象锁进入运行状态。
 * 
 * sleep:导致此线程暂停执行指定时间;
stop:这个方法将终止所有未结束的方法,包括 run 方法;
wait:当前正在被服务的线程需要睡一会,醒来后继续被服务。
 * @author cheng
 *
 */
public class Test02 {
public static void main(String args[]) throws InterruptedException {
Thread mThread = Thread.currentThread();
Thread t = new Thread() {
            public void run() {
            try {

                                Thread.sleep(250);//1.  这句话注释掉和不注释掉的区别,或者更改sleep里面时间的区别

} catch (InterruptedException e) {
e.printStackTrace();
}
                pong();
            }
        };
        t.start();//换成t.run(),观察不同一般在笔试题中是陷阱,混淆start
        mThread.sleep(250);//2.  这句话注释掉和不注释掉的区别,或者更改sleep里面时间的区别
        System.out.print("ping");
    }
    static void pong() {
        System.out.print("pong");
    }

}

分析:

情形一:如果把注释1(下文都用1)位置和注释2(下文都用2)位置的代码注释掉,那么输出为“pingpong”,首先从main方法入口顺序执行代码,当线程t被启动时,由于sleep方法都被注释掉了,main方法线程(mthread)和t线程(t)不会存在暂停并给其他线程让出cpu时间这一说。那么在t被启动瞬间,由于mthread还占用这cpu时间,所以会将后面的代码执行完成后输出ping,然后mthread让出cpu时间给t,t执行pong,最终输出pingpong(还有一种解释是mthread的优先级要大于t的优先级,不过应该不正确,毕竟mhread从头到尾如果没有sleep,那么就在一直占用cpu时间不会让给t。如果线程除了sleep,wait,stop方法外还有别的途径能自主放弃cpu时间。那么线程优先级的解释就是正确的,这是一些猜想,希望有人能给出认证。)

情形二:如果把1的代码注释掉,那么显然mthread会进入暂停,会让cpu时间给t,那么t执行输出pong。t线程完成任务被杀死,mthread接收cpu时间执行ping,最终结果输出pongping

情形三:如果1,2处代码都保留,并且里面的时间都写成250毫秒的话,那么有几率输出pingpong,也有几率输出pongping。

我们再从main接口跟着mthread顺序执行main方法内部的代码,当t.start()后,t被启动,这时候mthread进入暂停,然后cpu时间会分配给t,执行t内的run方法,然后t也被暂停。虽然从暂停上来看,mthread和t存在先后,mthread再前,但是这两个线程的暂停方法之间的时间可以忽略不计,为无穷小。那么从这方面分析,两个线程会同时醒来,这时候就看cpu给哪个线程分配时间了,如果是mthread那么显然输出pingpong,如果是t,显然输出pongping

SpringMVC并发请求线程安全问题案例分析 背景:一个人的成长在于你经历了多少,正如古语有云“读万卷书,不如行万里路。”做技术尤其如此,要想快速成长,必须先多写代码,多思考,多总结,当然还可以通过帮助别人解决问题来验证或者激励自己的成长。今天这篇文章主要是基于一个朋友在实际开发中出现的一个并发案例,在帮助其解决的过程中,发现自己也有很多的知识误区,遂写此篇以作记录,同时也分享给大家。 一,案例描述 ①,业务需求 用户通过系统生成邀请二 阅读详情

相关推荐

2021全新Java多线程并发入门到精通,一篇就能学会

目录一, JAVA 多线程并发1,JAVA 并发知识库2,JAVA 线程实现/创建方式(1) 继承 Thread 类(2)实现 Runnable 接口。(3)ExecutorService、Callable、Future 有返回值线程(4)基于线程池的方式(5)4 种线程池(6)newCachedThreadPool(7)newFixedThreadPool(8)newScheduledThreadPool(9)newSingleThreadExecutor3,线程生命周期(状态)(1)新建状态(NEW)(

dabaoad1122的博客 6985

实际场景中的多线程并发编程案例

一、CountDownLatch CountDownLatch的用法 CountDownLatch典型用法1:某一线程在开始运行前等待n个线程执行完毕。将CountDownLatch的计数器初始化为n new CountDownLatch(n) ,每当一个任务线程执行完毕,就将计数器减1 countdownlatch.countDown(),当计数器的值变为0时,在CountDownLatch上 await() 的线程就会被唤醒。一个典型应用场景就是启动一个服务时,主线程需要等待多个组件加载完毕,之后再继

iNiBuBian的博客 8996

6.1 多线程并发经典案例

多线程并发经典案例

杨充 2585

并发和并行

并行并发

m0_64884960的博客 1776

java 多线程并发实例

代码里面包含一个并发4个线程同时运行 全部开始 全部停止 单个停止还有点问题。 还有生产者消费者 里面的里面能帮助你理解多线程的运用!

先进封装基础知识

想象一下,芯片就像是电脑或手机的大脑,但它非常脆弱,需要被保护起来。芯片封装就是给芯片穿上一件“保护衣”,这件“保护衣”不仅可以保护芯片,还能帮助芯片与外部世界进行沟通。

阿拉伯梳子的专栏 1144

Java 多线程与并发(案例 + 应用)

1. 传统 创建线程的两种方式 2. 传统 定时器技术 3. 传统线程 互斥技术 4. 传统线程 同步通信技术 5. 线程范围内 共享变量 概念和作用 6. ThreadLocal类及应用技巧 7. 多个线程之间 共享数据的方式 8. Java 原子性类的应用 9. Java 线程并发库的应用(线程池) 10. Callable 与 future的应用 11. 线程锁的技术 12. Java 读写锁技术的使用 13. Java 条件阻塞condition的应用 14. Semaphore(信号灯)同步工具

探索技术与实践的旅程,分享编程经验与工具使用心得,助力开发者提升技能。 4134

三电平逆变器LC滤波设计避坑指南:从SVPWM谐波到Simulink仿真验证

本文详细解析了三电平逆变器LC滤波设计中的关键问题,从SVPWM谐波特性到Simulink仿真验证,提供了800V/10kW系统的参数计算方法和优化技巧。通过实际案例和仿真配置示例,帮助工程师避免常见设计误区,提升电能质量和系统稳定性。

weixin_29261711的博客 173

2、并发问题举例

买票

qq_39037116的博客 533

【从零开始学Skynet】实战篇《球球大作战》(一):功能设计

为了能把之前在基础篇中学习到的Skynet的各种知识结合起来,所以在实战篇中,我们准备开发一个完整的游戏案例《球球大作战》,介绍分布式游戏服务端的实现方法。

我是一条寻水的鱼 2978

步进电机

步进电机

happygrilclh的博客 2140

java 多线程并发,及spring boot 中应用示例

java 多线程并发问题,及spring boot 中应用示例

qq_41917433的博客 1463

73、结合无人机进行rk3588oak-lite跟踪目标物体进行识别、跟踪

搭建仿真转换模型环境,主要python版本和我下载的rknn2的版本。截取shape节点,输出模型。so库也要对应转模型的whl。其中安装的whl版本。

sxj731533730 1623

多线程高并发这一篇就够了不用再去别家了

  高伸缩性的并发编程是一种艺术,是成为高级程序员的必备知识点之一,最近总结了一下相关方面的知识。   借鉴过得博客有的我也不知道原文作业是谁 https://blog.youkuaiyun.com/qq_34337272/article/details/81072874 https://www.cnblogs.com/dolphin0520/p/3932921.html 一、线程 什么是线程? 线程是进...

qq_40388552的博客 7731

【超详细】计算机组成原理总结及思维导图

计算机组成 第一章 计算机系统概论 冯诺依曼型计算机特点 1.计算机由运算器,控制器,存储器,输入和输出设备5部分组成 2.采用存储程序的方式,程序和数据放在同一个存储器中,并以二进制表示。 3.指令由操作码和地址码组成 4.指令在存储器中按执行顺序存放,由指令计数器(即程序计数器PC)指明要执行的指令所在的储存单元地址,一般按顺序递增,但可按运算结果或外界条件而改变 5.机器以运...

圣三一 10万+

L3自动驾驶时代,域控制器核心解析(第一篇:架构演进与五域基础)

本文作为L3域控制器系列的第一篇,核心梳理了3个关键内容:L3时代为什么必须用域控制器:解决分布式ECU的协同、算力、迭代难题;域控制器的演进路线:从分布式ECU→域集中式→中央计算平台;博世五域架构的核心解析:五大域的定位、功能与典型方案。后续将持续更新系列文章,重点覆盖:第二篇:L3对域控制器的关键技术要求(传感器、算力、线控、软件、通信);第三篇:域控制器全产业链拆解(上游芯片、中游器件、下游总成);第四篇:域控制器的产业机遇与国产替代进展。

getusushu的博客 541

C# 线程并发

我也想过跳过C#高级知识点概要直接讲MVC,但经过前思后想,还是觉得有必要讲的。我希望通过自己的经验给大家一些指引,带着大家一起走上ASP.NET MVC大牛之路,少走弯路。同时也希望能和大家一起交流,这样也能发现我自己的不足,对我自己的帮助也是非常大的。 建议大家对C#撑握的不错的时候,可以去看一些开源项目。走技术这条路,就要耐得住寂寞(群里双休日说要让群主找妹子进群的人必须反思),练好内功。不撑握C#高级知识点,别想看懂优秀的开源项目,更别指望吸收其编程思想;你的水平,随时可以被一个实习生代替!切记不

huiguoyuan的博客 1417

基于 YOLOv26 的校园安全监控系统:多场景应用

本文提出了一种基于YOLOv26的校园安全监控系统,采用多场景应用架构实现对校园安全的智能监测。系统核心技术包括YOLOv26目标检测、DeepSORT目标跟踪、区域安全定义和行为分析等模块,通过边缘计算平台实现实时处理。研究构建了包含多种校园场景的专业数据集,并采用数据增强技术提升模型性能。系统可检测人员、车辆和物品等目标,分析其行为轨迹,评估安全风险并触发告警。实验结果表明,该系统能有效识别校园安全隐患,为安全管理提供智能化解决方案。

一键难忘的博客 503

多线程并行和并发区别的简单理解

多线程并行和并发的区别是什么? 目录 多线程并行和并发的区别是什么? 多线程相关概念 进程 线程 此时再来看多线程并行和并发的区别: 并行 并发 多线程相关概念 官方定义是: 多线程是指从软件或者硬件上实现多个线程并发执行的技术。 通俗来讲是: 指一个或多个进程有多条执行路径。 进程 • 指的是可以执行的程序或文件(例如: exe) 可以抽象理解为: 现实生活中的 汽车 线程 • 指的是进程的指定单元,也叫执行路径 可以抽象理解为: ...

Joieeee的博客 4494

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

多线程高并发,这一篇你就进阶了

多线程高并发等工具类,从源码理解原理

hotcsawp的博客 1347

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

线程并发编程的几大经典案例

本文介绍了多线程编程的五大经典案例:1)基础线程操作,使用std::thread创建和同步线程;2)数据同步,通过std::mutex和std::lock_guard避免数据竞争;3)生产者-消费者模型,利用std::condition_variable实现线程间通信;4)异步任务,使用std::async和std::future管理异步计算;5)线程池设计,通过任务队列和工作线程提高效率。每个案例都提供了核心思路和关键实现代码片段,涵盖多线程编程的基本概念和典型应用场景。

2202_75382767的博客 994

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

一篇搞懂多线程与并发(一)

什么是进程?进程是指运行中的程序。 比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。什么线程?线程是CPU调度的基本单位,每个线程执行的都是某一个进程的代码的某个片段。举个栗子:房子与人比如现在有一个100平的房子,这个方式可以看做是一个进程房子里有人,人就可以看做成一个线程。人在房子中做一个事情,比如吃饭,学习,睡觉。这个就好像线程在执行某个功能的代码。所谓进程就是线程的容器,需要线程利用进程中的一些资源,处理一个代码、指令。最终实现进程锁预期的结果。进程和

哀莫大于心死 1192

一篇文章搞懂多线程和高并发

文章目录一篇文章搞懂多线程和高并发Java内内存模型线程栈Thread Strack:线程堆Teap:线程堆栈的总结点:CPU:寄存器CPU Registers:高级缓存:主存总结:共享对象可见性Race Conditions原子性锁synchronized锁Lockvolatile关键字读写锁:未完待续~~~ 一篇文章搞懂多线程和高并发 基于之前对多线程的理解不全面且在实际应用缺乏相关的经验问...

海神九考 1028

简单的并发测试以及线程监控

并发测试 ab测试工具 JMeter测试工具 Eclipse设置程序可用内存 jvisualvm监控线程

LingDu 6308

Java实现多线程高并发简单案例

以上三个案例展示了不同场景下的Java多线程高并发实现方式:第一个案例展示了如何使用原子变量和线程池来处理大量并发计数任务第二个案例模拟了一个高并发Web服务器,展示了如何处理大量并发请求第三个案例实现了生产者-消费者模式,展示了如何在高并发环境下安全地共享资源在实际开发中,使用线程池、原子操作类和线程安全的集合类是处理高并发的关键。

坚持写博客,大家的关注是我前进的动力! 714

【QT进阶】Qt线程与并发之线程和并发的简单介绍

【QT进阶】Qt线程与并发之线程和并发的简单介绍

LF__plus的博客 751
上一篇: 线程方面错题集合以及答案详解
下一篇: 关于servlet的单例和线程安全问题的思考
whathellll
博客等级 码龄11年 23粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值