讲到 java 中synchronized关键字的话,是一个临界区的标识符,java代码在多线程进入此区块的时间必须是串行的。
以前在自己写一个培训文档中也讲过多线程应该是源于单线程,并行源于串行,简单的来说,可以认为所有从main开始,就生了万物!
由于synchronized这个特性一些书籍或网页上文字介绍synchronized的使用尽可能地少和短,多线程经常走走停停,会降低多线程的效率。
但是在这个减少使用的过程中,做到极端化,也是不可取的,它的具体表现就是在函数内的一部分使用synchronized括进一段代码。
这样会使得代码段比较长时或是从函数的外界很难知道里面一些锁的使用,也比较难以有主动意识避免多线程中的“死锁”。
如果将synchronized不管怎么样作为函数的修饰符,即使只是一个函数的一部分,那么就这一部分的代码可以抽取为一个类的方法,这样就可以在现在比较强大的IDE环境中,直接观察到函数的锁使用和提前发掘可能的死锁条件竞争。
这种思考是对所维护的代码中屡出现死锁后,如何预防的一种设想,应该是一种升华的。从性能讲可能会低,但是从代码可维护上讲是值得的,大多数软件的性能问题,从来都不是最大的问题,最大的问题在于故障丛生和无法低成本维护。