【JUC系列】01、之大话并发
学习方法
学习技术的方法都很类似,大部分都有着类似的步骤:
- 场景
- 需求
- 解决方案
- 应用
- 原理
并发的目的
- 充分利用CPU 和 I/O资源
- 提高效率
并发的维度
- 分工
- 同步/协作
- 互斥
分工
- 线程池
- fork/join
- future
- Guarded Suspension 保护性暂挂模式
- Balking模式
- Thread per Message 模式
- 生产者-消费者模式
- Worker thread模式
- 两阶段终止模式
-其他模式
同步/协作
- 信号量
- Monitor
- Synchronized
- condition & lock
- CountDownLatch
线程的5个状态
线程的生命周期中,存在着以下几个状态:
- new:创建线程,此时只是一个对象,线程并没有产生
- runnable:new之后的线程,通过start()方法开始,进入runnable 状态。即可执行状态,他是running状态的预备状态,等待cup的调度
- running:
- blocked:所阻塞状态
- terminated:线程结束的状态,导致原因:
- 1、线程正常结束,结束生命周期;
- 2、JVM crash
- 3、线程运行出错
进程和线程的区别
进程是受操作系统管理的基本运行单元
线程是在进程中独立运行的子任务
进程间如何通讯,线程间如何通讯
多线程特点
- 可以在同一时间内运行更多不同种类的任务
- 多线程是异步的
- 线程的调用是随机的
测试上下文切换次数和时长
- Lmbench3 测试时长
- vmstat 测试切换次数
减少上下文切换
- 无法并发编程
- CAS算法
- 使用最少线程,线程池
设计思想
模板模式
每个线程Thread 步骤都是 start->run 其中run的实现细节由实现类决定,即模板模式
策略模式
接口只是定义(策略)的本身,实现子类可以选择不同的实现逻辑。
好比说:支付,接口我只定义支付pay这个方法,子实现类1可以是支付宝支付的方式;子实现类2可以是微信支付的方式;
在Thread类中,Thread的创建一般都是说有两种,
- 一种是创建Thread,
- 一种是实现runnable接口。
- callable
其实本质上前者是重写run方法,后者是实现runnable接口中的run(), 并把实例作为构造Thread的参数
Runnable接口即是策略模式的体现
JDBC中 查询
【JUC系列】01、之大话并发的更多相关文章
- Java多线程系列--“JUC集合”01之 框架
概要 之前,在"Java 集合系列目录(Category)"中,讲解了Java集合包中的各个类.接下来,将展开对JUC包中的集合进行学习.在学习之前,先温习一下"Java ...
- Java多线程系列--“JUC锁”01之 框架
本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁Reentrant ...
- Java之JUC系列:外部Tools
前面写了两篇JDBC源码的文章,自己都觉得有点枯燥,先插一段JUC系列的文章来换换胃口,前面有文章大概介绍过JUC包含的东西,JUC体系包含的内容也是非常的多,不是一两句可以说清楚的,我这首先列出将会 ...
- java高并发系列 - 第2天:并发级别
由于临界区的存在,多线程之间的并发必须受到控制.根据控制并发的策略,我们可以把并发的级别分为阻塞.无饥饿.无障碍.无锁.无等待几种. 阻塞 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继 ...
- 自旋锁-JUC系列
公众号原文:自旋锁-JUC系列 前言 2022!这个年份现在看起来都觉得有那么些恍惚的未来感,然而现在已在脚下. 无边落木萧萧下, 不尽长江滚滚来! 人生如白驹过隙! 本来计划最近把AQS源码分析做了 ...
- AQS源码二探-JUC系列
本文已在公众号上发布,感谢关注,期待和你交流. AQS源码二探-JUC系列 共享模式 doAcquireShared 这个方法是共享模式下获取资源失败,执行入队和等待操作,等待的线程在被唤醒后也在这个 ...
- AQS源码三视-JUC系列
AQS源码三视-JUC系列 前两篇文章介绍了AQS的核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量.为上层各式各样的同步器实现画好了模版,像已经介绍到的ReentrantL ...
- java io系列01之 "目录"
java io 系列目录如下: 01. java io系列01之 "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...
- SAP接口编程 之 JCo3.0系列(01):JCoDestination
SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...
- Java 集合系列 01 总体框架
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
随机推荐
- Antd 修改主题颜色填坑记录
首先,让我想说的是,现在有很多的更新,网上的一些也有的没用了, 接下来让我来分享一些我的解决方法,时间:2018.12/18. 1.和网上的一样,我用的是creat-react-app创建的项目,修改 ...
- BZOJ 1070 拆点 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 5860 Solved: 2487[Submit][Status] ...
- 【Java_Eclipse】Eclipse插件如何卸载?
本博客我们讲一下对于Eclipse的插件卸载 1.Eclipse中:Window——Install New SoftWare 2.找到相应插件卸载即可
- ShoneSharp语言(S#)软件更新13.6版
ShoneSharp语言(S#)编辑解析运行器 软件更新13.6版 作者:Shone 今天把近期发现的各种软件问题做了修改,并发布新版ShoneSharp.13.6.exe,最新的网盘链接为: htt ...
- Git创建子分支,合并分支并提交到Gitee码云
Git合并分支后,需要将子分支提交到git仓库,这个时候就需要单独提交子分支,其步骤如下: 先创建子分支,并包含最新当前分支下的修改数据 git checkout -b sonBranch 将新分支内 ...
- StringUtils、CollectionUtils工具类的常用方法
唯能极于情,故能极于剑 欢迎来到 “程序牛CodeCow” 的博客,有问题请及时关注小编公众号 “CodeCow”,大家一起学习交流 下面将为大家演示StringUtils.CollectionUti ...
- 阿里短信回持.net sdk的bug导致生产服务cpu 100%排查
一:背景 1. 讲故事 去年阿里聚石塔上的所有isv短信通道全部对接阿里通信,我们就做了对接改造,使用阿里提供的.net sdk. 网址:https://help.aliyun.com/documen ...
- zookeeper启动报错:Error contacting service. It is probably not running
Error contacting service. It is probably not running. 今天启动zookeeper集群时,正常启动,但是查看状态时发现,Error contacti ...
- 记录我在Docker 中一步一步搭建Mysql 数据库存开发环境
准备在docker下来搭建mysql开发环境玩玩,当作学习笔记.搭建环境是:win10 企业版,docker desktop 19.03.8,mysql 5.7,Windows PowerShell ...
- 第 7 篇:文章详情的 API 接口
作者:HelloGitHub-追梦人物 一旦我们使用了视图集,并实现了 HTTP 请求对应的 action 方法(对应规则的说明见 使用视图集简化代码),将其在路由器中注册后,django-restf ...