final域的内存语义写final域的重排规则:禁止把final域的写重排序到构造方法之外,主要包括俩个个方面1)JMM禁止编译器把final域的写重排序到构造方法之外2)编译器会在final域写之后,构造函数return之前插入一个storestore屏障,这个屏障禁止处理器把final域的写重排序到构造..
分类:
编程语言 时间:
2017-08-07 17:36:45
阅读次数:
146
看这本书之前,对wait和notify认识大概就是,调用wait的线程A堵塞之后,一旦另外有线程调用notify方法。线程A会立马从wait方法处返回。看完这本书后。发现自己的认识实在太肤浅了。。。。。。 线程调用wait()后,会释放已经获得的锁。同一时候进入Waiting状态,而非Blocked ...
分类:
编程语言 时间:
2017-08-05 14:49:08
阅读次数:
137
一、并发编程的挑战 1、上下文切换 (1)上下文切换的问题 在处理器上提供了强大的并行性就使得程序的并发成为了可能。处理器通过给不同的线程分配不同的时间片以实现线程执行的自动调度和切换,实现了程序并行的假象。 在单线程中:线程保存串行的执行,线程间的上下文切换不会造成很大的性能开销。 而在多线程中:... ...
分类:
编程语言 时间:
2017-07-09 18:29:28
阅读次数:
253
Java并发基础(六) - 线程池 1. 概述 这里讲一下Java并发编程的线程池的原理及其实现 2. 线程池的基本用法 2.1 线程池的处理流程图 该图来自《Java并发编程的艺术》: 从图中我们可以看出当一个新任务到线程池时,线程池的处理流程如下: 线程池首先判断线程池里面线程数是否达到核心线程 ...
分类:
编程语言 时间:
2017-06-06 22:05:29
阅读次数:
266
上篇博客开始,我们接触了一些有关Java多线程的基本概念。这篇博客开始,我们就正式的进入了Java多线程的实战演练了。实战演练不仅仅是贴代码,也会涉及到相关概念和术语的讲解。 线程的状态 程的状态分为:新生,可运行,运行,阻塞,死亡5个状态。如下图: 状态说明: 新生(new):线程对象刚创建,但尚 ...
分类:
编程语言 时间:
2017-05-19 10:02:48
阅读次数:
292
离开博客园很久了,自从找到工作,到现在基本没有再写过博客了。在大学培养起来的写博客的习惯在慢慢的消失殆尽,感觉汗颜。所以现在要开始重新培养起这个习惯,定期写博客不仅是对自己学习知识的一种沉淀,更是在督促自己要不断的学习,不断的进步。 最近在进一步学习Java并发编程,不言而喻,这部分内容是很重要的。 ...
分类:
编程语言 时间:
2017-05-15 00:33:52
阅读次数:
231
前言本文来自方腾飞老师《Java并发编程的艺术》第一章。并发编程的目的是为了让程序运行得更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题,... ...
分类:
编程语言 时间:
2017-03-23 18:41:17
阅读次数:
171
多条线程之间有时需要数据交互,下面介绍五种线程间数据交互的方式,他们的使用场景各有不同。1. volatile、synchronized关键字PS:关于volatile的详细介绍请移步至:Java并发...
分类:
编程语言 时间:
2017-01-11 13:17:59
阅读次数:
242
1、深入理解Java虚拟机:JVM高级特性与最佳实践 2、Oracle查询优化改写技巧与案例 3、Effective Java 4、Spring3.x企业应用开发实战 5、Spring技术内幕:深入解析Spring架构与设计原理 6、Java并发编程的艺术 7、Java并发编程实战 8、型网站系统与 ...
分类:
编程语言 时间:
2016-12-01 17:08:14
阅读次数:
269