请回答以下几个问题:
问题一、你的项目是否运行在多核CPU甚至多CPU的服务器上?
问题二、你的项目中,是否使用到了线程池?
问题三、你的项目是否使用到了集群或者用到了分布式框架?
问题一不用想,任何人都会回答是,那么恭喜你,你已经有必要看看并发编程了。如果你符合以上三个问题的所有条件,那么恭喜你,你应该好好学习并发编程了,并发已经深深渗人你的项目中,甚至已经开始出现一些莫名其妙的问题,或者你已经在为这些并发引起的性能问题着急了。
或许你不信,你可能会说,我并不了解并发编程,但代码仍然稳定的跑了好几年啊!是的,有时候,并不需要深入研究一门技术,才会使用他。就像一个Java程序员,花上半天时间就能写出一个php程序一样,但为什么那样写,你却不一定了解。
并发编程也一样,虽然你觉得自己写的代码不存在并发问题,但实际上,你可能已经跨越了并发编程的白线,只是自己还没有察觉到而已。
我在读并发编程实战时,有这么一些体会,觉得所有的编程人员都有必要对并发编程精读。
1、Java语言出了一些规范(一直都有,只是在并发编程时发现里面对多线程的定义比较宽松),总体意思是说,在缺少同步的代码中,JVM不保证一个线程写入的一个变量值,对另外一个线程立即可见,这样,我们的代码中只要涉及到多线程共享数据,就要注意并发问题。
2、在硬件上,CPU的主频提高已经不太现实,CPU厂家也开始使用“多线程技术”或者多CPU技术,这些多线程会尝试将我们的代码并行化,以提高系统性能,并且这些技术在操作系统级别及JVM级别默认都是允许的,这样,就连硬件也不敢保证你多线程的代码按照你串行的模式运行。
3、编译器不可靠,我们写的Java语言是不能直接在cpu上面运行的,但经过编译器的编译,我们的代码被“优化”,如果我们不采取合适的同步,在运行时,可能会出现一些“惊喜”。
如果你也认同我的这些观点,那么,请好好读读 Java并发编程吧,非常不错的一本书。网上有很多可以下载的资源,有chm版的也有中文pdf版的。