【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 ...
随机推荐
- reids不重启切换rdb到aof
reids不重启切换rdb到aof
- 201771010120 苏浪浪 《面向对象程序设计(java)》第11周学习总结
实验十一 集合 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: (2) 了解java集合框架体系组成: (3) 掌握ArrayList.Lin ...
- 【MySQL】大白话讲讲主从架构的几种搭配方式详解
话不多,直接上图: 主要来详细讲讲各个搭配 1>一主一从(成本最低): 并不是用来提高程序性能的,主要是用来做数据的热备(即如果master节点挂掉的话,slave节点能充当master节点), ...
- Istio-架构
读书笔记整理 工作机制:分为控制面和数据面 控制面:Pilot, Mixer(接收来自Envoy上报的数据), Citadel(证书和密钥管理) 数据面:Envoy 工作流程: 自动注入 应用程序启动 ...
- 一个茴字有三种写法——吐槽C#9.0的Records
最近是微软开了Build 2020大会,由于疫情原因,改成了在线举行,Build大会上,C#公布9.0版本. 我个人对于C#的更新向来都是喜闻乐见,乐于接受的,对于博客园上某些人天天嘲讽C#只会增加语 ...
- Java——日期获取和日期格式化
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- JedisPool的使用-连接池
为什么要使用JedisPool 1,获取Jedis实例需要从JedisPool中获取 2,用完Jedis实例需要返还给JedisPool 3,如果Jedis在使用过程中出错,则也需要还给JedisPo ...
- 2020由浅入深最强Java面试题
1.String,StringBuffer和StringBuilder有什么区别? String是字符串常量,不可变对象,每次对String修改都等同于生成了一个新的String象,然后将指针 ...
- 人机协同与AI能力训练
我们进行<中台战略>一书的第三期分享. “人机融合是解决aI机器人冷启动的绝佳解决方案,我们这里引入了一个应答满意度的指标,每一个咨询应答都对应一个应答满意度.当消费者应该回答选择转入人工 ...
- nginx: [error] invalid PID number "" in ...
1.查看进程 ps -ef|grep nginx 2.进入nginx安装目录sbin下,执行命令: ./nginx -t 如下显示: syntax is ok test is successful 3 ...