Posted by 瞿广 Saturday, July 27, 2019
前面我们多次提到一个累加器的例子,示例代码如下。在这个例子中,add10K() 这个方法不是线程安全的,问题就出在变量 count 的可见性和 count+=1 的原子性上。可见性问题可以用 volatile 来解决,而原子性问题我们前面一直都是采用的互斥锁方案。
add10K()
count+=1
Posted by 瞿广 Friday, July 26, 2019 Last Modified on Saturday, July 27, 2019
在前面《08 | 管程:并发编程的万能钥 匙》中我们提到过在并发编程领域,有 两大核心问题:一个是互斥,即同一时刻只允许一个线程 访问共享资源;另一个是同步,即线程之间如何通信、协作。这两大问题,管程都是能够解决 的。Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程,其中 Lock 用于解决互斥 问题,Condition 用于解决同步问题。
这些年,我们的CPU、内存、I/O设备都在不断迭代,不断朝着更快的方向努力。但是在这个快速发展的过程中,又一个核心矛盾一直存在,就是这三者的速度差异。
Posted by 瞿广 Thursday, July 25, 2019 Last Modified on Saturday, July 27, 2019
传输层里比较重要的两个协议,一个是 TCP,一个是 UDP。对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议。由于 面试的时候,这两个协议经常会被放在一起问
Posted by 瞿广 Thursday, July 25, 2019
Software Developer, Open Source Enthusiast and Life Adventurer