看大家都是直接怼你的,却不说原因,还是我来说说吧。
synchronized 为什么在分布式环境中肯定是不能用的呢?
比如,我这个微服务,提供的是一个文件转换操作,将 doc 文件转换成 pdf 文件返回给调用者,而转换操作调用的系统的 dll ,通过调用 ms office 的功能实现的。那么这个时候,这个转换方法是否就可能要用到 synchronized 来强制串行化转换呢?为什么要串行化转换?因为 java 调用系统级功能和服务,是不能调用太多的,如果同时有 10 来个请求过来,我都调用这个 dll ,很可能出现系统进程太多(一般调用 dll 都是启动系统进程的),相互影响,在转换完成未正确关闭资源的情况。所以,我也懒得测试服务器到底多少个请求时能正确处理,直接使用 synchronized 标识方法,让其串行化执行。这是很常规的操作,其它一些场景类似。
再举个例子,我这个微服务是对数组内对象的某一项进行求和运算的(实际中可能不存在这样的东西还调用微服务去实现,这儿仅仅举例),那么,调用方丢给你一个数组,你要怎么样快速的计算出结果呢?没有多线程基础,你肯定想不到 forkjoin 吧?人家对于密集计算,给个32核心的cpu,只花费1秒就返回结果了,你却要花32秒才能返回结果,始终在调用其中一个核心在计算,你还能说自己写的代码没毛病?
综上,微服务只是对于业务场景的高层抽象及模块化处理,对于具体编写代码上,该使用线程的时候照样得使用。对于实际编码实现细节性业务逻辑上,你的代码并不会因为使用了微服务就能多高大上,没有丰富的多线程知识,写的该是垃圾还是垃圾。