《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. 《实战 Java 高并发程序设计》笔记——第3章 JDK 并发包(二)

    文章目录 3.2 线程复用:线程池 3.2.1 什么是线程池 3.2.2 不要重复发明轮子:JDK 对线程池的支持 1. 固定大小的线程池 2. 计划任务 3.2.3 刨根究底:核心线程池的内部实现 ...

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

    笔记 <实战Java高并发程序设计>中有很多代码范例,适合初学者通过实践入门并发编程,这本书有个问题就是前面的代码都用JDK7,第六章开始又用JDK8了 笔者做了相关笔记并整理源代码,欢迎 ...

  3. java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类

    是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

  4. 【实战Java高并发程序设计6】挑战无锁算法

    我们已经比较完整得介绍了有关无锁的概念和使用方法.相对于有锁的方法,使用无锁的方式编程更加考验一个程序员的耐心和智力.但是,无锁带来的好处也是显而易见的,第一,在高并发的情况下,它比有锁的程序拥有更好 ...

  5. 《实战Java高并发程序设计》.pdf

    关注"Java后端技术全栈" 回复"面试"获取全套面试资料 如今,秒杀已经变得十分常见,我们也都习以为常. 然而,从技术的角度来说,秒杀对于Web系统是一个巨大 ...

  6. 今天开始拜读一本大神写的书《实战Java高并发程序设计 》

    基本信息 书名:实战Java高并发程序设计 定价:69.00元 作者:葛一鸣著 出版社:电子工业出版社 出版日期:2015-10-01 ISBN:9787121273049 字数:493000 页码: ...

  7. 《实战Java高并发程序设计》读后感

    写在前面无关的内容 白驹过隙,看下日历已经毕业4年多,加上在大学里的4年,算算在计算机界也躺了八年,按照格拉德韦尔的1万小时定律差不多我也该成为行业的专家了,然后并没有.当看着"什么是Jav ...

  8. 【读书笔记】实战Java高并发程序设计(第2版)读书笔记

    文章目录 1.概述 1.1. 走进并行世界 1.2 java并行程序基础 1.3 jdk并发包 1.4 锁的优化以及注意事项 1.5 并行模式与算法 1.6 java 8 9 10与并发 1.7 使用 ...

  9. 最新炼数成金实战Java高并发程序设计+完整课件

    课程目录: 1.前言 2.多线程基础[vxia.net] 3.Java内存模型和线程安全 4.无锁 5.JDK并发包1[vxia.net] 6.JDK并发包2 7.并行设计模式 8.NIO和AIO[v ...

最新文章

  1. 更新ADT到Android L的方法
  2. Android 控件架构及View、ViewGroup的测量
  3. Debian 10发布:基于Linux 4.19内核,包含5.9万软件包
  4. 【转】C#调用ADOX创建Access数据文件后关闭连接
  5. Android学习笔记36:使用SQLite方式存储数据
  6. C语言函数参数既做出参又做入参的代表
  7. linux svn cleanup 用法,SVN命令之清理命令(clean up)的功能及使用技巧
  8. 《BI项目笔记》多维数据集中度量值设计时的聚合函数
  9. 时间同步绝对是一个大问题
  10. 勇于尝鲜,感受世界——对话阿里云 MVP黄坤
  11. Entity Framework (EF)/Linq To entity/ ESQL(entity sql)区别 ADO.NET Entity Framework:来自微软官方的ORM框架
  12. [Web Chart系列之五] 2. 实战draw2d 之Label 放大,缩小的问题(raphael的text类似问题)
  13. Python学习笔记大总结(我把我所有python笔记做了总结和学习顺序,点击即可进入相关博客。希望可以便于你们阅读)
  14. 武汉大学计算机学院推免率,武汉大学保研率
  15. 课堂作业:首尾相连求最大子数组
  16. 1754. 骑士精神
  17. Java基础——注解和反射——注解自定义与反射具体使用实例
  18. Tensorflow五种花卉分类
  19. libxml2 安装使用
  20. Base64在线解析,编码转化为图片

热门文章

  1. 微信小程序之Flex布局
  2. 字符串大小写转换html,用JavaScript将字符串进行大小写转换的方法
  3. 错误(10044): 不能将“文本型 数组”数据转换到“文本型”数据。
  4. Java中方法重写和方法重载的6个区别?
  5. java apply_使用Function.apply的Java泛型
  6. 清理小树PDF及布丁压缩和桌面
  7. Android模拟器 - error while loading state for instance 0x0 of device 'goldfish_pipe'
  8. VHDL直流电机模糊控制器的设计与实现
  9. 用例图——远程网络教学系统
  10. 后台——侧边和面包屑导航栏设计与实现方案