彩虹导航个人博客
最新博客
  • 2019年04月01日 14 | Lock和Condition(上):隐藏在并发包中的管程 摘要: Java SDK 并发包内容很丰富,包罗万象,但是我觉得最核心的还是其对管程的实现。因为理论上利用管程,你几乎可以实现并发包里所有的工具类。在前面《08 | 管程:并发编程的万能钥匙》中我们提到过在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信... 发表于 2019-04-01 19:08 阅读(864) 评论(0)

  • 2019年04月01日 13 | 理论基础模块热点问题答疑 摘要: 到这里,专栏的第一模块——并发编程的理论基础,我们已经讲解完了,总共 12 篇,不算少,但“跳出来,看全景”你会发现这 12 篇的内容基本上是一个“串行的故事”。所以,在学习过程中,建议你从一个个单一的知识和技术中“跳出来”,看全局,搭建自己的并发编程知识体系。为了便于你更好地学习和理解,下面我会先将这些知识... 发表于 2019-04-01 19:07 阅读(794) 评论(0)

  • 2019年04月01日 12 | 如何用面向对象思想写好并发程序? 摘要: 在工作中,我发现很多同学在设计之初都是直接按照单线程的思路来写程序的,而忽略了本应该重视的并发问题;等上线后的某天,突然发现诡异的 Bug,再历经千辛万苦终于定位到问题所在,却发现对于如何解决已经没有了思路。关于这个问题,我觉得咱们今天很有必要好好聊聊“如何用面向对象思想写好并发程序”这个话题。面向对象思想与... 发表于 2019-04-01 19:05 阅读(1089) 评论(0)

  • 2019年04月01日 11 | Java线程(下):为什么局部变量是线程安全的? 摘要: 我们一遍一遍重复再重复地讲到,多个线程同时访问共享变量的时候,会导致并发问题。那在 Java 语言里,是不是所有变量都是共享变量呢?工作中我发现不少同学会给方法里面的局部变量设置同步,显然这些同学并没有把共享变量搞清楚。那 Java 方法里面的局部变量是否存在并发问题呢?下面我们就先结合一个例子剖析下这个问题... 发表于 2019-04-01 19:04 阅读(931) 评论(0)

  • 2019年04月01日 10 | Java线程(中):创建多少线程才是合适的? 摘要: 在 Java 领域,实现并发程序的主要手段就是多线程,使用多线程还是比较简单的,但是使用多少个线程却是个困难的问题。工作中,经常有人问,“各种线程池的线程数量调整成多少是合适的?”或者“Tomcat 的线程数、Jdbc 连接池的连接数是多少?”等等。那我们应该如何设置合适的线程数呢?要解决这个问题,首先要分析... 发表于 2019-04-01 19:03 阅读(1174) 评论(0)

  • 2019年04月01日 09 | Java线程(上):Java线程的生命周期 摘要: 在 Java 领域,实现并发程序的主要手段就是多线程。线程是操作系统里的一个概念,虽然各种不同的开发语言如 Java、C# 等都对其进行了封装,但是万变不离操作系统。Java 语言里的线程本质上就是操作系统的线程,它们是一一对应的。在操作系统层面,线程也有“生老病死”,专业的说法叫有生命周期。对于有生命周期的... 发表于 2019-04-01 19:00 阅读(878) 评论(0)

  • 2019年03月18日 08 | 管程:并发编程的万能钥匙 摘要: 并发编程这个技术领域已经发展了半个世纪了,相关的理论和技术纷繁复杂。那有没有一种核心技术可以很方便地解决我们的并发问题呢?这个问题如果让我选择,我一定会选择管程技术。Java 语言在 1.5 之前,提供的唯一的并发原语就是管程,而且 1.5 之后提供的 SDK 并发包,也是以管程技术为基础的。除此之外,C/C... 发表于 2019-03-18 10:10 阅读(1285) 评论(0)

  • 2019年03月18日 07 | 安全性、活跃性以及性能问题 摘要: 通过前面六篇文章,我们开启了一个简单的并发旅程,相信现在你对并发编程需要注意的问题已经有了更深入的理解,这是一个很大的进步,正所谓只有发现问题,才能解决问题。但是前面六篇文章的知识点可能还是有点分散,所以是时候将其总结一下了。并发编程中我们需要注意的问题有很多,很庆幸前人已经帮我们总结过了,主要有三个方面,分... 发表于 2019-03-18 10:09 阅读(947) 评论(0)

  • 2019年03月18日 06 | 用“等待-通知”机制优化循环等待 摘要: 由上一篇文章你应该已经知道,在破坏占用且等待条件的时候,如果转出账本和转入账本不满足同时在文件架上这个条件,就用死循环的方式来循环等待,核心代码如下:// 一次性申请转出账户和转入账户,直到成功while(!actr.apply(this, target));复制代码如果 apply() 操作耗时非常短,而... 发表于 2019-03-18 09:57 阅读(714) 评论(0)

  • 2019年03月18日 05 | 一不小心就死锁了,怎么办? 摘要: 在上一篇文章中,我们用 Account.class 作为互斥锁,来解决银行业务里面的转账问题,虽然这个方案不存在并发问题,但是所有账户的转账操作都是串行的,例如账户 A 转账户 B、账户 C 转账户 D 这两个转账操作现实世界里是可以并行的,但是在这个方案里却被串行化了,这样的话,性能太差。试想互联网支付盛行... 发表于 2019-03-18 09:56 阅读(654) 评论(0)

Powered by 彩虹导航 V3.0 Copyright © 2012-2016 彩虹导航网站 版权所有