实战java高并发程序设计-笔记进行中

实战Java高并发程序设计(一)————————Java并行程序基础 Java并行程序基础 阅读详情

《JAVA并发编程实践》:出书时间太早,内容比较散,专业术语翻译较早和现在有差异
《Java并发编程的艺术》:手绘图较多文字内容较少,主要讲解并发实现的底层原理和面临的问题,底层原理方面面试必考内容
《实战java高并发程序设计》:出书时间2014年时间很近。文字内容整理规范,专业术语规范,重在讲解相关概念,底层原理请参考上面的那本书《Java并发编程的艺术》

综上推荐书名《Java并发编程的艺术》,《实战java高并发程序设计》,阅读笔记进行中…随着阅读进展后面会同步更新相关的内容

相关概念

同步Ssynchronous,异步Asynchronous
在时间线上同时发生则是异步,必须前后顺序发生则是同步

并发Concurrency,并行Parallelism
并发在一个时间段内多个事件同时进行而实质上是依次串行的,并行在一个时间点上同时进行

临界区:多个线程竞争同一个资源,但每次只有一个线程能够使用其他线程则等待

阻塞Blocking,非阻塞Non-Blocking
对临界区资源进行使用时,未竞争到的线程就被挂起,这种情况对被挂起的线程来说就是阻塞的。
非阻塞则指没有一个线程会妨碍其他线程执行的情况

死锁Deadlock,饥饿Starvation,活锁Livelock
相互竞争所有线程都一直处于等待-红绿灯坏了相向堵车
低优先级的线程一直等待无法获取资源-廉租房
所有线程都相互谦让对方,使资源空闲在线程中切换而致使所有线程都处于等待状态-相互让路

并发级别
阻塞Blocking,
无饥饿Starvation-Free,所有线程都可以获取到资源-而非优先级高的,eg:阻塞队列
无障碍Obstruction-Free,没有阻塞都可以进入临界区,eg:乐观锁,AWS
无锁Lock-Free:无锁的并行都是无障碍的

JMM特点
原子性Atomicity:一个操作不可中断
可见性Visibility:线程之间修改彼此可见
有序性ordering:指令重排的前提是保证串行语义的一致性,但是对多线程并不保证语义一致性

指令重排必须遵守Happen-Before原则:这些原则保证指令重排不可违背

并行程序基础

进程(process)是系统资源分配和调度的基本单位,是当代面向线程设计的计算机结构中,进程是线程的容器。

线程的状态

这里写图片描述

a.start()方法,调用该方法开始执行该线程;
b.stop()方法,调用该方法强制结束该线程执行,无论是否执行完成,已经废弃不建议使用;
c.join()方法,调用该方法的线程让出CPU,等待该线程c执行结束才获取到CPU执行权,相当于这两个线程同步。
d.sleep()方法,调用该方法的线程进入等待,不会释放对象锁。
e.run()方法,调用该方法直接执行线程的run()方法,但是线程调用start()方法时也会运行run()方法,区别就是一个是由线程调度运行run()方法,一个是直接调用了线程中的run()方法!!
f.wait()和notify():要注意,其实wait()与notify()方法是Object的方法,不是Thread的方法!!同时,wait()与notify()会配合使用,分别表示线程挂起和线程恢复,wait()会释放对象锁。
g.suspend() 和 resume()方法:两个方法配套使用,suspend()使得线程进入阻塞状态,不会释放占用的锁(如果占用了的话),并且不会自动恢复,必须其对应的resume()被调用,才能使得线程重新进入可执行状态。典型地,suspend()和 resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume()使其恢复。
h.yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。

注意区别:

wait()与sleep()的区别,简单来说wait()会释放对象锁而sleep()不会释放对象锁。这些问题有很多的资料,不再赘述。
初看起来wait() 和 notify() 方法与suspend()和 resume()
方法对没有什么分别,但是事实上它们是截然不同的。区别的核心在于,前面叙述的suspend()及其它所有方法在线程阻塞时都不会释放占用的锁(如果占用了的话),而wait()
和 notify() 这一对方法则相反。
如果另外的一个线程调用了相同对象的notifyAll()方法,那么处于该对象的等待池中的线程就会全部进入该对象的锁池中,准备争夺锁的拥有权。如果另外的一个线程调用了相同对象的notify()方法,那么仅仅有一个处于该对象的等待池中的线程(随机)会进入该对象的锁池.

《实战 Java 高并发程序设计》笔记——第1章 走入并行世界(一) 文章目录1.1 何去何从的并行计算1.1.1 忘掉那该死的并行1.1.2 可怕的现实:摩尔定律的失效1.1.3 柳暗花明:不断地前进1.1.4 光明或是黑暗1.2 你必须知道的几个概念1.2.1 同步(Synchronous)和异步(Asynchronous)1.2.2 并发(Concurrency)和并行(Parallelism)1.2.3 临界区1.2.4 阻塞(Blocking)和非阻塞(Non-Blocking)1.2.5 死锁(Deadlock)、饥饿(Starvation)和活锁(Liveloc 阅读详情

相关推荐

《实战 Java 高并发程序设计》笔记——第4章 锁的优化及注意事项(一)

文章目录4.1 有助于提高 “锁” 性能的几点建议4.1.1 减小锁持有时间4.1.2 减小锁粒度4.1.3 读写分离锁来替换独占锁4.1.4 锁分离4.1.5 锁粗化4.2 Java 虚拟机对锁优化所做的努力4.2.1 锁偏向4.2.2 轻量级锁4.2.3 自旋锁4.2.4 锁消除4.3 人手一支笔:ThreadLocal4.3.1 ThreadLocal的简单使用4.3.2 ThreadLocal 的实现原理4.3.3 对性能有何帮助 声明: 本博客是本人在学习《实战 Java 高并发程序设计》后整理

bm1998 324

Java高并发程序设计模式-图文解说+代码示例

在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。《设计模式:可复用面向对象软件的基础》 收录 23种模式观察者模式策略模式装饰者模式享元模式模板方法其他架构模式MVC分层设计模式提炼系统中的组件代码模式(成例 Idiom)低层次,与编码直接相关如DCLbyte[] raw;

怀揣梦想,一颗执着于技术的心从未磨灭,内心住着一颗顽强的小强时刻提醒自己层层突破自我,同时也成就他人 877

Frida实战:如何用adb快速连接网易mumu模拟器进行参数Hook(附常见CPU架构问题排查)

本文详细介绍了如何使用Frida和adb快速连接网易MuMu模拟器进行参数Hook,包括环境配置、架构适配、Frida-server部署及常见问题排查。特别针对CPU架构兼容性问题提供了实用解决方案,帮助开发者高效完成逆向调试任务。

weixin_29274969的博客 289

【java学习】多线程之高并发编程:线程&任务&启动任务

1,synchronized(同步块)(1)概念用synchronized 关键字来实现同步块,所有加上synchronized 的块语句,在多线程访问的时候,同一时刻只能有一个线程能够访问,另一个线程必须等到当前线程访问完毕才能访问此代码块,解决了多线程的安全问题。即:加锁。(2)缺陷多个线程判断锁,耗费资源,降低代码执行效率。(3)作用①实现操作的原子性什么是原子性?原子操作即:不可分割的单一的...............

午后阳光 4863

CANoe之UDS诊断自动化测试(四):创建诊断自定义Panel发送诊断(替代Session Control窗口)

通过自定义的Panel界面实现诊断发送的功能,并且还可以根据自己的测试需求添加需要的诊断信息,使用非常灵活。

weixin_69677286的博客 1903

告别Python依赖!用C++编译PaddleOCR打造轻量级本地OCR工具(附模型选择与性能对比)

本文详细介绍了如何将PaddleOCR从Python迁移到C++平台,打造高性能、低资源占用的本地OCR工具。通过对比Python和C++实现的性能差异,展示了C++在冷启动时间、内存占用和部署便捷性上的显著优势。文章还提供了模型选择、编译配置和优化技巧等实用指南,帮助开发者轻松构建轻量级OCR解决方案。

weixin_28717467的博客 256

高并发的程序设计-系统设计层面

高并发的程序设计:3、如果没有合适的case,有个案例:百万数据秒级导出到excel文件实战,就从线程池、多线程、批量处理、mysql性能调优、数据库连接池调优、sql调优等多个层面去做了调优的。除此之外,还有MQ生产方秒杀千万QPS实战的案例,建议都可以参考的。这里我们可以使用规则的数据结构来存储和转发。 响应时间:系统对进来的请求反应的时间,比如你打开一个页面需要1秒,那么这1秒就是响应时间。吞吐量:吞吐量是指每秒能处理多少请求数量,好比你吃饭,每秒能吃下多少颗米饭。秒查询率:秒查询率是指每秒响应请求数

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 495

Python实现多元线性回归(Multiple Linear Regression)

多元线性回归是一种用于建立多个自变量与因变量之间关系的统计学方法。在多元线性回归中,我们可以通过多个自变量来预测一个因变量的值。每个自变量对因变量的影响可以用回归系数来表示。

优快云 精品推荐 4326

9.实战java高并发程序设计(全书总结)

1.了解同步(Synchronous)异步(Asynchronous)的区别 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回, 2.并发(Concurrency)和并行(Parallelism)的区别 并行的多个任务是真的同时执行,而对于并发来说,这个过程只是交替的,一会儿执行任务A,一会儿执行任务B,系统...

ashylya的博客 1003

【2026最新版】Open3D(C++)点云处理算法汇总(C++长期更新版)

C++版本Open3D进行点云处理的一些算法使用案例。博客长期更新,最近一次更新时间为:2026年4月11日。

点云侠的博客 1万+

如何解除“无法完成操作 因为文件包含病毒或潜在垃圾软件”

当运行软件遇到“无法完成操作 因为文件包含病毒或潜在垃圾软件”时,如何解决?控制面板-系统和安全-Windows Defender防火墙-自定义设置,将专用网络及公用网络关闭。点击后,选择“病毒和威胁防护”-管理配置。进入安全中心后,选择“病毒和威胁防护”将需要排斥的选项输入后,保存配置即可。2:打开windows安全中心。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 6万+

实战Java高并发程序设计》笔记

《实战Java高并发程序设计》笔记 Linus:The only place where parallelism matters is in graphical or the server side,where we already largely have it. Pushing it anywhere is just pointless 一 走入并行世界 1.2 你必须知道的几个概念: 同步和异步 同步:同步调用一旦开始,调用者必须等到方法返回后才能继续后续的行为 异步:异步方法更像一个消息传递,

张学友 252

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)

kngines 1833

《实战java高并发程序设计》源码整理及读书笔记

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 不要被标题吓到,虽然书籍是《实战java高并发程序设计》,不过本文只是写一写本人的一点读书感受,顺便整理了一下书中的代码,其实我原本是不想敲代码的,不过去网络上搜了一圈之后,发现根本没有现成的,只能自己敲了,既然整理好了一部分代码,索性就上传到Gi...

Elinor2017的博客 259

stop pin/ignore pin/exclude pin/float pin

stop pin、ignore pin、exclude pin、float pin的区别

m0_61544122的博客 7288

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《实战Java高并发程序设计》读书笔记

本文首发在我的个人博客:https://jlice.top/p/7t3gc/。欢迎大家前去参观,么么哒~ 这两天快速看了下《实战Java高并发程序设计》这本书,对Java高并发程序有一个初步的认识。 这本书是在iPad上用MarginNotes 3看的,只是做了些笔记,还没进行代码实践,后续还需要细化。 基础概念 并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的,而并行是真正...

文剑木然的专栏 360

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

探索并发之美:《实战Java高并发程序设计》笔记与源码解析

探索并发之美:《实战Java高并发程序设计》笔记与源码解析 在这个多核时代,并发编程已成为每个开发者不可或缺的技能。今天,我们聚焦于一个特别的开源宝藏——《实战Java高并发程序设计》笔记及源码仓库。这个项目不仅深入浅出地解读了这本经典著作,更为广大开发者提供了一个实践并发编程的绝佳平台。 项目介绍 《实战Java高并发程序设计》是一本面向Java开发者,旨在揭开并发世界的神秘面纱的宝典。本书由葛...

gitblog_01061的博客 357

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《实战Java高并发程序设计》(葛一鸣、郭超)学习笔记

第2章 Java并行程序基础 2.1 有关线程你必须知道的事 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。线程就是轻量级进程,是程序执行的最小单位。 2.2 初始线程:线程的基本操作 2.2.1 新建线程 (1)继承Thread类,重写run()方法 Thread t=new Thr...

六月二十七的博客 732

《实战 Java 高并发程序设计》笔记——第5章 并行模式与算法

文章目录5.1 探讨单例模式5.2 不变模式5.3 生产者-消费者模式 声明: 本博客是本人在学习《实战 Java 高并发程序设计》后整理的笔记,旨在方便复习和回顾,并非用作商业用途。 本博客已标明出处,如有侵权请告知,马上删除。 由于并行程序设计比串行程序复杂得多。因此,我强烈建议大家可以熟悉和了解一些常见的设计方法。就好像练习武术一样,一招一式都是要经过学习的。如果自己胡乱打一气,效果不见得好。前人会总结一些武术套路,对于初学者来说,不需要发挥自己的想象力,只要按照武术套路出拳就可以了。等到练到了一

bm1998 284

《实战 Java 高并发程序设计》笔记——第4章 锁的优化及注意事项(二)

文章目录4.4 无锁4.4.1 与众不同的并发策略:比较交换(CAS)4.4.2 无锁的线程安全整数:AtomicInteger4.4.3 Java 中的指针:Unsafe 类4.4.4 无锁的对象引用:AtomicReference4.4.5 带有时间戳的对象引用:AtomicStampedReference4.4.6 数组也能无锁:AtomicIntegerArray4.4.7 让普通变量也享受原子操作:AtomicIntegerFieldUpdater4.4.8 挑战无锁算法:无锁的 Vector 实

bm1998 322

《实战 Java 高并发程序设计》笔记——第1章 走入并行世界(二)

文章目录1.4 有关并行的两个重要定律1.4.1 Amdahl 定律1.4.2 Gustafson 定律1.4.3 Amdahl 定律和 Gustafson 定律是否相互矛盾1.5 回到 Java:JMM1.5.1 原子性(Atomicity)1.5.2 可见性(Visibility)1.5.3 有序性(Ordering)1.5.4 哪些指令不能重排:Happen-Before 规则 声明: 本博客是本人在学习《实战 Java 高并发程序设计》后整理的笔记,旨在方便复习和回顾,并非用作商业用途。 本博客已

bm1998 295

实战java高并发程序设计笔记

前言 消息中间件作为分布式系统的重要成员,各大公司及开源均有许多解决方案。目前主流的开源解决方案包括RabbitMQ、RocketMQ、Kafka、ActiveMQ等。消息这个东西说简单也简单,说难也难。简单之处在于好用方便,接入简单使用简单,异步操作能够解耦系统间的依赖,同时失败后也能够追溯重试。难的地方在于,设计一套可以支撑业务的消息机制,并提供高可用架构,解决消息存储、消息重试、消息队列的负载均衡等一系列问题。然而难也不代表没有方法或者“套路”,熟悉一下原理与实现,多看几个框架的源码后多总结势必能找

m0_56144365的博客 110

《实战Java高并发程序设计》读书笔记六

《实战Java高并发程序设计》读书笔记六 第六章 Java 8 与并发 1、函数式编程 函数作为一等公民: 将函数作为参数传递给另外一个函数这是函数式编程的特性之一。 函数可以作为另外一个函数的返回值,也是函数式编程的重要特点。 无副作用: 函数的副作用是指在函数调用过程中除了给出了返回值以外还修改了其他函数的外部状态。...

AmyZheng_的博客 398

《实战Java高并发程序设计》github笔记和源码

书籍概况 作者: 葛一鸣 / 郭超 出版社: 电子工业出版社 出版年: 2015-11 页数: 352 定价: 69.00元 ISBN: 9787121273049 笔记 《实战Java高并发程序设计》中有很多代码范例,适合初学者通过实践入门并发编程 鉴于没有配套代码,笔者做了笔记并整理源代码,近期还在不断更新中,欢迎交流和 Star 笔记在 notes,源代码在 src 如有需要...

灵魂画师牧码 4288

《实战Java高并发程序设计》读书笔记四

第四章 锁的优化及注意事项 1、锁性能的几点建议 减小锁持有时间: 系统持有锁时间越长锁竞争程度就越激烈,只对需要同步的方法加锁,可以减小锁持有时间进而提高锁性能。 减少锁的持有时间有助于降低锁冲突的可能性,进而提高锁的并发能力。 减小锁粒度: 减小锁粒度就是指缩小锁定对象的范围,从而减小锁冲突的可能性,进而提高并发能力。 读写分离锁代替独占锁(锁分离): ...

weixin_30713953的博客 101
上一篇: 类加载机制:双亲委任模型和tomcat类加载器
下一篇: 函数式编程
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值