实战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高并发程序设计-笔记进行中相关推荐
- 《实战 Java 高并发程序设计》笔记——第3章 JDK 并发包(二)
文章目录 3.2 线程复用:线程池 3.2.1 什么是线程池 3.2.2 不要重复发明轮子:JDK 对线程池的支持 1. 固定大小的线程池 2. 计划任务 3.2.3 刨根究底:核心线程池的内部实现 ...
- 《实战Java高并发程序设计》github笔记和源码
笔记 <实战Java高并发程序设计>中有很多代码范例,适合初学者通过实践入门并发编程,这本书有个问题就是前面的代码都用JDK7,第六章开始又用JDK8了 笔者做了相关笔记并整理源代码,欢迎 ...
- java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类
是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...
- 【实战Java高并发程序设计6】挑战无锁算法
我们已经比较完整得介绍了有关无锁的概念和使用方法.相对于有锁的方法,使用无锁的方式编程更加考验一个程序员的耐心和智力.但是,无锁带来的好处也是显而易见的,第一,在高并发的情况下,它比有锁的程序拥有更好 ...
- 《实战Java高并发程序设计》.pdf
关注"Java后端技术全栈" 回复"面试"获取全套面试资料 如今,秒杀已经变得十分常见,我们也都习以为常. 然而,从技术的角度来说,秒杀对于Web系统是一个巨大 ...
- 今天开始拜读一本大神写的书《实战Java高并发程序设计 》
基本信息 书名:实战Java高并发程序设计 定价:69.00元 作者:葛一鸣著 出版社:电子工业出版社 出版日期:2015-10-01 ISBN:9787121273049 字数:493000 页码: ...
- 《实战Java高并发程序设计》读后感
写在前面无关的内容 白驹过隙,看下日历已经毕业4年多,加上在大学里的4年,算算在计算机界也躺了八年,按照格拉德韦尔的1万小时定律差不多我也该成为行业的专家了,然后并没有.当看着"什么是Jav ...
- 【读书笔记】实战Java高并发程序设计(第2版)读书笔记
文章目录 1.概述 1.1. 走进并行世界 1.2 java并行程序基础 1.3 jdk并发包 1.4 锁的优化以及注意事项 1.5 并行模式与算法 1.6 java 8 9 10与并发 1.7 使用 ...
- 最新炼数成金实战Java高并发程序设计+完整课件
课程目录: 1.前言 2.多线程基础[vxia.net] 3.Java内存模型和线程安全 4.无锁 5.JDK并发包1[vxia.net] 6.JDK并发包2 7.并行设计模式 8.NIO和AIO[v ...
最新文章
- 更新ADT到Android L的方法
- Android 控件架构及View、ViewGroup的测量
- Debian 10发布:基于Linux 4.19内核,包含5.9万软件包
- 【转】C#调用ADOX创建Access数据文件后关闭连接
- Android学习笔记36:使用SQLite方式存储数据
- C语言函数参数既做出参又做入参的代表
- linux svn cleanup 用法,SVN命令之清理命令(clean up)的功能及使用技巧
- 《BI项目笔记》多维数据集中度量值设计时的聚合函数
- 时间同步绝对是一个大问题
- 勇于尝鲜,感受世界——对话阿里云 MVP黄坤
- Entity Framework (EF)/Linq To entity/ ESQL(entity sql)区别 ADO.NET Entity Framework:来自微软官方的ORM框架
- [Web Chart系列之五] 2. 实战draw2d 之Label 放大,缩小的问题(raphael的text类似问题)
- Python学习笔记大总结(我把我所有python笔记做了总结和学习顺序,点击即可进入相关博客。希望可以便于你们阅读)
- 武汉大学计算机学院推免率,武汉大学保研率
- 课堂作业:首尾相连求最大子数组
- 1754. 骑士精神
- Java基础——注解和反射——注解自定义与反射具体使用实例
- Tensorflow五种花卉分类
- libxml2 安装使用
- Base64在线解析,编码转化为图片
热门文章
- 微信小程序之Flex布局
- 字符串大小写转换html,用JavaScript将字符串进行大小写转换的方法
- 错误(10044): 不能将“文本型 数组”数据转换到“文本型”数据。
- Java中方法重写和方法重载的6个区别?
- java apply_使用Function.apply的Java泛型
- 清理小树PDF及布丁压缩和桌面
- Android模拟器 - error while loading state for instance 0x0 of device 'goldfish_pipe'
- VHDL直流电机模糊控制器的设计与实现
- 用例图——远程网络教学系统
- 后台——侧边和面包屑导航栏设计与实现方案