死磕Java并发
文章平均质量分 67
chenbinkria
这个作者很懒,什么都没留下…
展开
-
重排序引起的内存可见性问题
什么是重排序什么是内存可见性将产生的问题如何解决问题什么是重排序 重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种优化措施如果两个操作访问同一个变量,且这两个操作有一个为写操作,此时这两个操作之间就存在数据依赖性数据依赖性可概括为以下三种类型: 上面三种情况,只要重排序两个操作的执行顺序,程序的结果就会被改变。在Java内存模型(以下...原创 2018-03-25 20:40:31 · 1024 阅读 · 1 评论 -
多线程的优势和风险
多线程一直都被广泛的讨论和研究,可是为什么要用多线程呢?多线程又究竟会产生哪些问题呢?线程的优势线程的风险多线程的优势提高系统的吞吐率:多线程编程使得一个进程可以有多个并发操作,例如当一个线程以为IO操作而处于等待时,其它线程仍然可以执行其操作。 提高响应性:使用多线程的情况下,对于GUI软件,如Desktop程序,一个慢的操作(比如从服务器下载一个大文件)并不会导致软件的...原创 2018-04-01 17:06:57 · 1270 阅读 · 0 评论 -
如何安全的发布一个对象
要正确的发布一个对象首先要解决3个问题: 1.发布的对象只需要被它需要被看见的线程或其它对象看见 2.避免逸出问题 3.避免其它线程拿到未初始化完全的对象什么是发布 发布一个对象是指,使对象能够在当前作用域之外的代码中使用。比如,将创建的对象保存到容器中,也可能通过某个方法返回对象的引用,或者将引用传递到其他类的方法中。什么是逸出 逸出是指某个不应该发布的对象被...原创 2018-04-15 17:21:41 · 1291 阅读 · 1 评论 -
ThreadLocal引起的内存泄漏问题
在讲解ThreadLocal内存泄漏问题之前首先需要明确两个概念:内存泄漏 指由于对象永远无法被垃圾回收导致其占用的JVM内存无法被释放。持续的内存泄漏会导致JVM可用内存减少,并最终可能导致JVM内存溢出(out of memory)直到JVM宕机。伪内存泄漏 类似于内存泄漏,伪内存泄漏中对象所占用的内存在其不再使用后的相当长一段时间仍然无法被回收,也可能永远无...原创 2018-04-22 17:08:36 · 1469 阅读 · 0 评论 -
使用包装器是来实现线程安全
在Java平台的类库中还有很多线程封闭的示例,其中有些类的唯一用途就是将非线程安全的类转化为线程安全的类。一些基本的容器类并非线程安全的,例如ArrayList,HashMap。类库提供了一些包装器工程方法(例如Collections.synchronizedList及其类似的方法),使得这些非线程安全的类可以在多线程环境下安全的使用。这些工程方法通过“装饰器”模式将容器类封装在一个同步的容器里,...原创 2018-04-22 21:47:04 · 660 阅读 · 0 评论 -
读《Golang适合高并发场景的原因分析》有感
并发作为问题确实很复杂,但若是作为一个学习点,也许可以从这两个方向来思考。 1.并发最终都要落实到操作系统层面,就算代码写的天花乱坠,也不能背离操作系统。毕竟程序的执行还是得依靠操作系统。 2.抛开操作系统级别,我们所能做大概就是在并发的模型上下功夫。 小生阅历尚浅,只能就目前所看对模型上进行一点总结: 首先,并发问题中的问题才是关键,其问题是因为资源有限而产生的,我们之前谈过,贡献资源的...原创 2018-08-05 21:02:49 · 673 阅读 · 0 评论