网站名称是否已被注册,简单的个人主页网站制作,网站备案号 查询,wordpress禁用修订线程安全#xff0c;在java的多并发编程中是重要概念#xff0c;意思是#xff0c;多个线程同时操作一个对象#xff0c;在各种不同情况下#xff0c;都不会造成不同的后果。一个经典问题#xff0c;Vector到底是不是线程安全的#xff1f;很多人都会回答#xff0c;是…线程安全在java的多并发编程中是重要概念意思是多个线程同时操作一个对象在各种不同情况下都不会造成不同的后果。一个经典问题Vector到底是不是线程安全的很多人都会回答是vector是线程安全的。诚然不止是很多IT教材上是这么写的就连JDK的作者写的注释也是这么说的。如下图(图为 JDK中Vector的源代码)注释中红框标记的部分写着如果你不需要线程安全的实现类那就推荐你用ArrayList而不是Vector。言外之意就是说Vector是线程安全的。自己看了源码发现确实很多方法都有同步关键字synchronized,从而保证所有的对外接口都会以 Vector对象为锁即在vector内部所有的方法都不会被多线程访问。但是单个方法的原子性(注原子性程序的原子性即不会被线程调度机制打断)并不能保证复合操作也具有原子性。(你问 为什么复合操作不能保证原子性? 参见大神的帖子https://blog.csdn.net/xdonx/article/details/9465489 我没太多时间研究细节所以就只好剽窃大佬的结论了╮(▽)╭)所以这个问题的正确回答应该是虽然源代码注释里面说这个是线程安全的因为确实很多方法都加上了同步关键字synchronized但是对于符合操作而言只是同步方法并没有解决线程安全的问题。要真正达成线程安全还需要以vector对象为锁来进行操作。所以如果是这样的话那么用vector和ArrayList就没有区别了所以不推荐使用vector。所以说就算是JDK也会有坑毕竟坑坑更健康有坑才能引导我们思考毕竟做程序是理科工作要有怀疑精神。其实具体为什么复合操作不具有原子性我也没有太深究可能要从Vector代码里面找根据有空再探究。